【问题标题】:ASP net 4 how pass the errors objects to a jsonASP net 4 如何将错误对象传递给 json
【发布时间】:2017-01-15 17:22:14
【问题描述】:

我如何将我的 ModelState 错误传递给 json 并在 jquery 中关联表单中的对象。我的表格:

<form id="form">
    <div class="row">
        <div class="col-sm-6">
            <div class="form-group">
                @Html.TextBoxFor(m => m.VatNumber,new { @class = "form-control", @id="VatNumber"})
                 @Html.ValidationMessageFor(model => model.VatNumber, "", new { @class = "text-danger" })
             </div>
        </div>
        <div class="col-sm-6">
             <div class="form-group">
                <input type="submit" class="btn btn-primary" value="Check VAT" />
            </div>
        </div>
   </div>
</form>

我的控制器:

   [HttpPost]
    public ActionResult CheckVat(VatSearch data)
    {
        //string a =vatnumber.VatNumber;
        //return Json(data.VatNumber);
        return Json(ModelState);
    }

他给出了一个错误:

检测到循环引用使序列化无效 对象类型

【问题讨论】:

    标签: jquery asp.net json asp.net-mvc-4


    【解决方案1】:

    您的代码实际上没有意义。为什么要返回 ModelState 字典?如果您尝试使用模型验证,您还有其他几种方法可以做到这一点。

    如果模型验证失败,您可以将验证错误消息作为 json 响应的一部分返回,并根据需要向用户显示

    [System.Web.Mvc.HttpPost]
    public ActionResult CheckVat(VatSearch data)
    {
        var list = new List<string>();
        if (!ModelState.IsValid)
        {
            var errors = ViewData.ModelState.Values
                                 .SelectMany(f => f.Errors
                                                  .Select(x => new {Error = x.ErrorMessage,
                                                          Exception =x.Exception})).ToList();
            return Json(new {Status="error",Errors = errors});
    
        }
        return Json(new {Status="success"});
    }
    

    在您的 ajax 调用的成功方法中,只需检查 Status 属性,然后如果它是“错误”,则遍历 Errors 集合并获取每个错误并根据需要使用。

    success: function (result) {
        if(result.Status==="error")
        $.each(result.Errors, function(a, b) {
                alert(b.Error);
        });
    },
    

    您应该认真考虑的另一件事是使用客户端不显眼的验证。这甚至在您提交表单之前进行客户端验证。

    【讨论】:

    • 如果我这样做了,验证总是令人怀疑的,我使用不显眼的验证
    猜你喜欢
    • 1970-01-01
    • 2015-10-06
    • 1970-01-01
    • 2016-12-21
    • 2012-06-02
    • 2014-01-21
    • 2016-04-01
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多