【发布时间】:2011-11-14 21:58:46
【问题描述】:
我为我的 View Model 类添加了 ValidationSummary Html 帮助程序,该类有 5 个必填字段。它的工作原理是漂亮的红色单词缺少 1、缺少 2 等。 但我只需要显示一条消息而不是其中的五条(例如:“您的输入无效。”)。这可以通过 ValidationSummary 完成吗?
【问题讨论】:
我为我的 View Model 类添加了 ValidationSummary Html 帮助程序,该类有 5 个必填字段。它的工作原理是漂亮的红色单词缺少 1、缺少 2 等。 但我只需要显示一条消息而不是其中的五条(例如:“您的输入无效。”)。这可以通过 ValidationSummary 完成吗?
【问题讨论】:
我在 MVC3 中使用的一种蛮力方法:
if (!ModelState.IsValid)
{
ModelState.AddModelError("", "Some contextual error message");
}
并将其显示在您的页面上:
<% if(!ViewData.ModelState.IsValid) { %>
<span class="error"><%=ViewData.ModelState[String.Empty].Errors[0].ErrorMessage %> </span>
<% } %>
【讨论】:
如果您查看 MVC3 源代码,您会发现,目前,如果您在使用 excludePropertyErrors=true 和 UnobtrusiveJavaScriptEnabled 的同时使用 ValidationSummary,则不会呈现任何验证摘要。
我能够在启用 UnobtrusiveJavascript 的 MVC3 中仅显示一条消息,用于客户端验证。根本不要使用@Html.ValidationSummary,然后渲染:
@{
//Show the message when there are server side errors
ViewBag.ValidationSummaryClass = ViewData.ModelState.IsValid ? "validation-summary-valid" : "validation-summary-errors";
}
<div class="@ViewBag.ValidationSummaryClass" data-valmsg-summary="true">
<span>Before you can continue, please make sure you have completed the mandatory fields highlighted above.</span>
<ul style="display:none"/>
</div>
注意display:none,不显眼的 javascript 仍然会用错误消息填充列表,但它们会被隐藏。
【讨论】:
如果您只想在 ModelState 无效时显示一条消息,则可以尝试跳过帮助程序。只需检查ViewData 中的ModelState 即可。
@if (!ViewData.ModelState.IsValid)
{
<p>Your input is not valid.</p>
}
【讨论】:
你有两个选择(至少):
要么使用验证摘要,要么排除属性错误:
@Html.ValidationSummary(true, "The input is not valid")
或将错误消息与您的操作中的自定义键相关联:
if (!ModelState.IsValid)
{
ModelState.AddModelError("myerrorsummary", "The input is not valid");
}
并将其显示在您的页面上:
@Html.ValidationMessage("myerrorsummary")
【讨论】: