Ajax.BeginForm()在出错时设置javascript变量

时间:2014-02-03 18:40:04

标签: javascript jquery ajax asp.net-mvc

我的ajax形式如下:

@using (Ajax.BeginForm("AddMyModel", "MyModel",
new AjaxOptions
{
    HttpMethod = "POST",
    OnBegin = "begin",
    OnComplete = "end",
    UpdateTargetId = "addcontent",
   InsertionMode = InsertionMode.InsertAfter
},
new
{
    id = "validationForm",
    @class = "edit_form",
   style = "width: 400px;"
}))
{
<div id="addcontent">
    @Html.Partial("_MyPartialView", Model)
</div>
}

当我提交表单时,它会转到MyModel控制器中的AddMyModel函数。

我想要的是什么: 如果函数AddMyModel中的错误设置了一个javascript变量,我可以在javascript函数结束后检查它。

MyJavascriptFile.js:

var success;

function end()
{
   if(success==false)
   {
         //I know there was error
   }
}

有可能吗?这听起来合理还是容易出错?

1 个答案:

答案 0 :(得分:3)

您应该在AjaxOptions集合中设置OnFailure选项:

@using (Ajax.BeginForm("AddMyModel", "MyModel",
new AjaxOptions
{
    HttpMethod = "POST",
    OnBegin = "begin",
    OnComplete = "end",
    OnFailure = "handleError(error)",
    UpdateTargetId = "addcontent",
   InsertionMode = InsertionMode.InsertAfter
},

然后:

function handleError(error)
{
   //error handling logic
}

以这种方式处理此类错误是一种非常常见的做法。

如果您希望能够自行决定某项行动是否成功,您可以写下以下内容:

[HttpPost]
public ActionResult Process(MyViewModel model)
{
    if (!ModelState.IsValid) // for example
    {
        return Json(new { success = false });
    }
    return Json(new { success = true });
}

然后修改您的OnSuccess功能:

OnComplete = "end(result)"

然后将错误检查作为success函数的一部分进行处理:

function end(result) {
    if (result.success) {
        // executed when successful
    } else {
        // executed when you decided it is not successful
    }
}