asp.net MVC – ValidationSummary不显示

前端之家收集整理的这篇文章主要介绍了asp.net MVC – ValidationSummary不显示前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个奇怪的问题,其中ValidationSummary没有显示.但是,正在显示ValidationMessage.我已经检查了输出页面的源代码,并不像它们的颜色那样模糊.我正在使用RC.有任何想法吗?

编辑:
ValidationSummary设置的断点显示

ViewData.ModelState.Values[1].ErrorMessage = ""
ViewData.ModelState.Values[1].Exception.InnerException.Message = "4a is not a valid value for Int32"

ValidationSummary是否使用ErrorMessage和ValidationMessage使用InnerException.Message?

我的查看代码是:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage<App.Models.PurchaSEOrdersView>" %>


<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <title>Edit</title>
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Edit</h2>

    <%= Html.ValidationSummary() %>

    <% Html.BeginForm("Edit","PurchaSEOrder",FormMethod.Post); %>
    <table>
        <tr>
            <td>
                Purchase Order Id:
            </td>
            <td>
                <%= Html.TextBox("PurchaSEOrderId",Model.PurchaSEOrderId)%>
                <%= Html.ValidationMessage("PurchaSEOrderId")%>
            </td>
        </tr>
        <tr>
            <td>
                Date:
            </td>
            <td>
                <%= Html.TextBox("Date",Model.Date.ToString("dd-MMM-yyyy"))%>
                <%= Html.ValidationMessage("Date")%>
            </td>
        </tr>
    </table>
    <input type="submit" value="Save" />

    <% Html.EndForm(); %>

</asp:Content>

解决方法

你不说什么错误不显示,但有一些错误显示在ValidationMessage,但不在ValidationSummary.我认为这是发布候选人的错误,但我对其他解释开放.特别是从ValidationSummary的源代码考虑这一行:
string errorText = GetUserErrorMessageOrDefault(modelError,null /* modelState */);

请注意,对于modelState没有传递任何内容.现在与ValidationMessage对比:

... GetUserErrorMessageOrDefault(modelError,modelState) ...

最后,我们来看看GetUserErrorMessageOrDefault:

private static string GetUserErrorMessageOrDefault(ModelError error,ModelState modelState) {
        if (!String.IsNullOrEmpty(error.ErrorMessage)) {
            return error.ErrorMessage;
        }
        if (modelState == null) {
            return null;
        }

        string attemptedValue = (modelState.Value != null) ? modelState.Value.AttemptedValue : null;
        return String.Format(CultureInfo.CurrentCulture,MvcResources.Common_ValueNotValidForProperty,attemptedValue);
    }

这告诉我们,如果在向模型状态添加错误时指定自定义错误消息,将显示它.但是,如果添加了一个异常(对于接受异常的AddModelError有一个重载,另一个重载异常,另一个重载一个字符串;实现IDataErrorInfo就像字符串大小写一样),而不是一个字符串错误消息,只有在modelState为非空,然后我们给你一个通用消息,而不是异常的错误消息.

更新

Does ValidationSummary use ErrorMessage and ValidationMessage use InnerException.Message?

是的,这或多或少的效果.就像我说的,我觉得这是一个bug.

UPDATE2

Microsoft更新了GetUserErrorMessageOrDefault函数,如here所示.

private static string GetUserErrorMessageOrDefault(HttpContextBase httpContext,ModelError error,ModelState modelState)
    {
        if (!String.IsNullOrEmpty(error.ErrorMessage))
        {
            return error.ErrorMessage;
        }
        if (modelState == null)
        {
            return null;
        }

        string attemptedValue = (modelState.Value != null) ? modelState.Value.AttemptedValue : null;
        return String.Format(CultureInfo.CurrentCulture,GetInvalidPropertyValueResource(httpContext),attemptedValue);
    }

猜你在找的asp.Net相关文章