MVC 4 Ajax.BeginForm和ModelState.AddModelError
我试图在ajax提交返回错误后显示错误。我不确定我错过了什么,但我无法让它发挥作用。这个问题基本上是一样的,但我仍然没有任何运气。我使用Ajax和MVC(任何版本)的经验仍然有点有限。这里是一个非常简单的例子,我从前面的链接中获取了大部分 视图:test.cshtmlMVC 4 Ajax.BeginForm和ModelState.AddModelError,ajax,asp.net-mvc-4,razor,Ajax,Asp.net Mvc 4,Razor,我试图在ajax提交返回错误后显示错误。我不确定我错过了什么,但我无法让它发挥作用。这个问题基本上是一样的,但我仍然没有任何运气。我使用Ajax和MVC(任何版本)的经验仍然有点有限。这里是一个非常简单的例子,我从前面的链接中获取了大部分 视图:test.cshtml @model TestProject.VisitLabResult @Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js") @Scripts.Render("~/S
@model TestProject.VisitLabResult
@Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js")
@Scripts.Render("~/Scripts/ckeditor/ckeditor.js")
@{
AjaxOptions ajaxOpts = new AjaxOptions
{
Url = Url.Action("test"),
HttpMethod = "Post",
LoadingElementId = "loading",
LoadingElementDuration = 500,
OnSuccess = "processData"
};
}
@Html.ValidationMessage("CustomError")
<div id="loading" class="load" style="display:none">
<p>Saving...</p>
</div>
<table>
@for (int item = 0; item < 10; item++)
{
<tr id = @item>
@using (Ajax.BeginForm(ajaxOpts))
{
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
<td>
<input type="submit" value="Create" />
</td>
<td id = @(item.ToString() + "td")>
</td>
}
</tr>
}
</table>
模型
public class VisitLabResult
{
public int visitid { get; set; }
}
如果它是一个Ajax请求,我抛出一个错误,它被捕获,一个错误被添加到ModelState中。不过,这个错误从未出现在页面上。我这样做对吗?还是我需要走不同的路线?非常感谢您的帮助。我只是想为其他人解答这个问题。ajax帮助程序根据返回的HTTP代码,根据以下各项触发
OnSuccess
vsOnFailure
:
:如果响应状态在200范围内,则调用此函数。:如果响应状态不在200范围内,则调用此函数 换句话说,通过更改
Response.StatusCode
,然后返回OnFailure
js方法中期望的值,您必须手动指定返回ActionResult时出现故障。您可以根据您想要的任何业务逻辑(即catch Exception ex)
或来驱动它!ModelState.IsValid
…)
进一步阅读:
public class VisitLabResult
{
public int visitid { get; set; }
}
[HttpPost]
public ActionResult Search(Person model)
{
if (ModelState.IsValid) {
// if valid, return a HTML view inserted by AJAX helper
var results = PersonRepository.Get(model)
return PartialView("Resulsts", vm);
} else {
// if invalid, return a JSON object and handle with OnFailure method
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(new { errors = ModelState.Values.SelectMany(v => v.Errors) });
}
}