1

客户端验证和 ValidationSummary 对我的项目(MVC4 + Razor + Unobtrusive JS)运行良好,但服务器端错误未显示在我的视图中,如果有任何客户端错误,它不会从视图中删除(它确实来自模型状态)。我在 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,可能有更好的方法来自动处理这种类型的错误处理。

4

1 回答 1

0

解决了,有一点小错误。

主视图

@*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 和星号将不再显示在无效支付货币上,仅突出显示字段。

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

于 2012-03-27T13:41:31.907 回答