2010-04-21 2 views
2

У меня есть страница выглядит следующим образом:Ajax.BeginForm обратный результат и показать данные соответствующие

<% using (Ajax.BeginForm("AddAnswer","Marketplace",new AjaxOptions() {HttpMethod = "POST" })){ %> 

AddAnswer действие добавляет некоторые данные в БД. Я хочу сделать следующее: когда ответ был успешно добавлен, добавьте #answers div с текущим ответом, переданным контроллеру. Когда ответ не был успешно добавлен в db - я хотел бы отобразить соответствующую ошибку в div #errors. Как я могу это сделать?

ответ

5

Вот что я могу предложить:

Контроллер:

[HttpPost] 
public ActionResult AddAnswer(string Value) 
{ 
    // TODO: Try to insert the answer value into the database 
    // and return a JSON object that contains the attempted value 
    // and an error message if necessary 
    return Json(new { Answer = Value, ErrorMessage = "" }); 
} 

Вид:

<% using (Ajax.BeginForm("AddAnswer", "Home", 
     new AjaxOptions { HttpMethod = "POST", OnSuccess = "success" })) { %> 
    <%= Html.TextBoxFor(x => x.Value) %> 
    <input type="submit" value="Add answer" /> 
<% } %> 

<div id="errors"></div> 
<div id="answers"></div> 

<script type="text/javascript"> 
    function success(arg) { 
     var obj = arg.get_response().get_object(); 
     // I apologize for the ugliness that follows, I don't know MS Ajax 
     // but this might written better: 
     if (obj.ErrorMessage === '') { 
      var answer = document.createElement('div'); 
      answer.appendChild(document.createTextNode(obj.Answer)); 
      document.getElementById('answers').appendChild(answer); 
     } else { 
      document.getElementById('errors').innerHTML = obj.ErrorMessage; 
     } 
    } 
</script> 
+0

'arg.get_response(). Get_object();' не работает для меня. Я не понимаю, почему это не возвращает объект json. – Peter

+0

@Wale, может быть, потому, что я написал этот ответ 22 апреля 2010 года, когда скрипты Microsoft AJAX были способом сделать AJAX в ASP.NET MVC, и теперь это 2013 (скоро будет 2014 год), и вы используете более новую версию ASP .NET MVC (например, 4 или 5), где помощники Ajax. * Используют jquery ненавязчивый ajax, где синтаксис совершенно другой? –

+0

Вы совершенно правы. Я новичок в MVC, я не мог сказать разницы. – Peter

0

Я хотел бы добавить комментарий к ответу Дарин, но по какой-то причине я не могу , В основном события OnSuccess и OnFailure НЕ проверяют модель, они просто подтверждают, что вызов AJAX был успешным, и он перешел к контроллеру, и он вернулся без каких-либо ошибок. Итак, если вы хотите отправлять сообщения об ошибках с контроллера, вам нужно сделать это, как сказал Дарин, отправив объект json и обработав его в событии onSuccess. Вы можете на самом деле отправить список < string> с ошибками и сгенерировать HTML-список в javascript позже или что вам нужно.

Смежные вопросы