Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MVC 4 Ajax.BeginForm和ModelState.AddModelError_Ajax_Asp.net Mvc 4_Razor - Fatal编程技术网

MVC 4 Ajax.BeginForm和ModelState.AddModelError

MVC 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

我试图在ajax提交返回错误后显示错误。我不确定我错过了什么,但我无法让它发挥作用。这个问题基本上是一样的,但我仍然没有任何运气。我使用Ajax和MVC(任何版本)的经验仍然有点有限。这里是一个非常简单的例子,我从前面的链接中获取了大部分

视图:test.cshtml

@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
vs
OnFailure

:如果响应状态在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) });

  }
}