适当

2010-04-21 47 views
2

Ajax.BeginForm返回结果,并显示数据我有一个页面,如下所示:适当

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

AddAnswer行动增加了一些数据,以分贝。我想要做的是:当成功添加回答时,附加#answers div与传递给控制器​​的当前答案。当答案尚未成功添加到数据库 - 我想在#errors div显示适当的错误。我怎样才能做到这一点?

回答

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 2013-12-30 18:46:15

+0

@Wale,也许是因为我在2010年4月22日编写了这个答案,当时Microsoft AJAX脚本是在ASP.NET MVC中执行AJAX的方式,现在是2013年(即将于2014年),并且您正在使用一些更新版本的ASP .NET MVC(如4或5)Ajax。*帮助程序使用jQuery不显眼的Ajax,其语法完全不同? – 2013-12-30 22:15:06

+0

你很对。我是MVC的新手,我不知道区别。 – Peter 2014-01-02 10:27:13

0

我想添加到Darin的答案评论,但由于某种原因,我不能。 基本上,OnSuccess和OnFailure事件不验证模型,它们只是验证AJAX调用是否成功,它是否到达控制器并且返回时没有任何错误。 因此,如果你想从控制器发送错误消息,你需要像Darin所说的那样发送一个json对象并在onSuccess事件中处理它。 你实际上可以发送一个List> < string>,并在后面的javascript中生成一个HTML列表,或者你需要的任何东西。