如何从验证摘要中删除列表

时间:2011-09-11 20:37:38

标签: asp.net-mvc validation

我为View Model类添加了ValidationSummary Html帮助器,它有5个必填字段。它的作品得到了很好的红色单词缺失1,缺少2等。 但我需要只显示一条消息,而不是五条消息(类似于:“您的输入无效。”)。可以使用ValidationSummary吗?

4 个答案:

答案 0 :(得分:14)

您有两种选择(至少):

使用验证摘要并排除属性错误:

@Html.ValidationSummary(true, "The input is not valid")

或将错误消息与您的操作中的自定义关联关联:

if (!ModelState.IsValid)
{
    ModelState.AddModelError("myerrorsummary", "The input is not valid");
}

并将其显示在您的页面上:

@Html.ValidationMessage("myerrorsummary")

答案 1 :(得分:4)

如果ModelState无效,如果您只想显示消息,则可以尝试跳过帮助程序。只需检查ModelState中的ViewData即可。

@if (!ViewData.ModelState.IsValid)
{
    <p>Your input is not valid.</p>
}

答案 2 :(得分:2)

如果您查看MVC3源代码,您会看到,目前,如果您在ValidationSummary时使用excludePropertyErrors=true UnobtrusiveJavaScriptEnabled,则不会显示任何验证摘要。

我能够使用启用了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仍然会在列表中填入错误消息,但它们会被隐藏。

答案 3 :(得分:0)

我在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>
<% } %>