服务器端错误的ValidationSummary无法正常工作

时间:2012-03-21 11:03:48

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

客户端验证和ValidationSummary适用于我的项目(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,可能有更好的方法来自动处理这种类型的错误处理。

1 个答案:

答案 0 :(得分:0)

解决了,有一个小错误。

主视图

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

PaymentCurrency查看

@*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和星号,只会突出显示字段。

请帮我修复,我宁愿不改变当前的结构,否则我会开始大错误