【问题标题】:ValidationSummary for server side errors is not working服务器端错误的 ValidationSummary 不起作用
【发布时间】:2012-03-27 21:41:31
【问题描述】:

客户端验证和验证摘要对我的项目(MVC4 + Razor + Unobtrusive JS)运行良好,但服务器端错误未显示在我的视图中,如果有任何客户端错误,它不会从视图中删除(它来自 ModelState)。我在 Chrome14 和 IE9 上都试过了

服务器端错误将作为ModelState.AddModelError(string.Empty, ModelState.AllErrors()); 添加到模型中,并在视图中显示为@Html.ValidationSummary(false)

编辑

简单的表单提交工作正常,它显示了从服务器返回的多个错误消息并更新了错误消息,但是,基于 ajax 的表单提交不起作用,根本不显示基于 ajax 的表单提交返回的错误消息。

这里是如何发出请求的示例演示

    @*... View contents related to Master Model  ...*@
    @using (Ajax.BeginForm("ActionToAddRecord", new AjaxOptions()))
    {
        @Html.Action("ActionToAddRecord")
        <input type="submit" value="Add Record"/>
    }
    @*... View contents related to Master Model  ...*@

ActionToAddRecord 是表示主模型包含的模型的局部视图

错误返回为

[HttpGet]
public ActionResult ActionToAddRecord()
{
    return View();
}

[HttpPost]
public ActionResult ActionToAddRecord(childModel model)
{
    ModelState.AddModelError(string.Empty, "First error message");
    ModelState.AddModelError(string.Empty, "Second error message");
    return View(model);
}

编辑

我在 VS2010 的模板化 MVC 应用程序中看到了类似的功能,即基于对话框的登录表单。错误消息作为 Json 返回,然后 JS 用于显示它们,IMO,似乎 MS 使基于 Ajax 的请求变得非常简单和简洁(Ajax.BeginForm),但缺少错误处理部分。现在我不愿意为此使用 JS,可能有更好的方法来自动处理这种类型的错误处理。

【问题讨论】:

    标签: asp.net-mvc-3 asp.net-mvc-4 asp.net-mvc-validation


    【解决方案1】:

    已解决,有一个小错误。

    主视图

    @*Master View Contents*@
            @using (Ajax.BeginForm("AddPaymentCurrency", new AjaxOptions { UpdateTargetId = "paymentCurrency" }))
            {
                <div id="paymentCurrency"> 
                    @{Html.RenderPartial("PaymentCurrency", Model.PaymentCurrencyNew);}
                </div>
            }
    

    支付货币视图

    @*Model Editors*@
    @Html.ValidationSummary(false)
    <input type="submit" value="Add Payment Currency"/>
    
    <div id="paymentCurrencyList" style="width:inherit; height:auto; overflow:auto;"> 
        @Html.Action("PaymentCurrencyList")
    </div>
    

    控制器

    [HttpPost]
    public ActionResult AddPaymentCurrency(PaymentCurrency model)
    {
        if (!ModelState.IsValid)
        {
            ModelState.AddModelError(string.Empty, ModelState.AllErrors());
            return View("PaymentCurrency", model);
        }
        //Add login
        return View("PaymentCurrency", model);
    }
    
    public ActionResult PaymentCurrencyList()
    {
        //var list = getList
        return View(list);
    }
    

    小错误

    在添加无效付款货币时,ValidationSummary 会突出显示字段并在其上显示星号。添加有效货币后,ValidationSummary 和星号将不再显示在无效付款货币上,仅突出显示字段。

    请帮我把它修好,我不想改变当前的结构,否则我会开始得到大错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 2012-09-16
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多