我有一个奇怪的问题,即没有显示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>
答案 0 :(得分:11)
尝试
<%= Html.ValidationSummary(false) %>
答案 1 :(得分:6)
您没有说明哪些错误没有显示,但有些错误会在ValidationMessage中显示,但在ValidationSummary中不会显示。我认为这是Release Candidate中的一个错误,但我对其他解释持开放态度。特别是,请考虑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是非null,然后我们将为您提供通用消息,而不是异常上的错误消息。
<强>更新强>
ValidationSummary是否使用ErrorMessage并且ValidationMessage使用InnerException.Message?
是的,这或多或少都是影响。就像我说的,我认为这是一个错误。
<强> 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);
}