Ajax.BeginForm返回结果并显示相应的数据

时间:2010-04-21 19:46:04

标签: asp.net-mvc ajax

我有一个页面如下:

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

AddAnswer操作会向db添加一些数据。我想要做的是:成功添加答案后,追加#answers div,并将当前答案传递给控制器​​。当答案尚未成功添加到db时 - 我想在#errors div中显示相应的错误。我怎么能这样做?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

我想对Darin的回答添加评论,但出于某种原因,我不能。  基本上OnSuccess和OnFailure事件不验证模型,它们只是验证AJAX调用是否成功,它是否转到控制器并且它没有任何错误地返回。  所以,如果你想从控制器发送错误消息,就像Darin说的那样,发送一个json对象并在onSuccess事件上处理它。  你实际上可以发送一个List&lt;串GT;有错误并稍后在javascript中生成HTML列表,或者您需要的任何内容。