我的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
}
}
有可能吗?这听起来合理还是容易出错?
答案 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
}
}