Asp.net mvc 2 在ASP.NET MVC 2中自定义验证摘要

Asp.net mvc 2 在ASP.NET MVC 2中自定义验证摘要,asp.net-mvc-2,validationsummary,Asp.net Mvc 2,Validationsummary,我想在ASP.NET MVC 2中自定义ValidationSummary的html输出 从 哎呀!验证失败,因为: 标题字段是必需的 Body字段是必需的 到 哎呀!验证失败,因为: 标题字段是必需的 Body字段是必需的 asp.net MVC 2中有什么新方法可以解决这个问题吗?似乎没有任何方法可以通过模板来实现,这非常糟糕。如果查看此特定帮助器方法的代码,您将看到HTML被烘焙到方法本身中: public static string ValidationSummary(t

我想在ASP.NET MVC 2中自定义ValidationSummary的html输出


哎呀!验证失败,因为:
  • 标题字段是必需的
  • Body字段是必需的


哎呀!验证失败,因为:

  • 标题字段是必需的
  • Body字段是必需的

asp.net MVC 2中有什么新方法可以解决这个问题吗?

似乎没有任何方法可以通过模板来实现,这非常糟糕。如果查看此特定帮助器方法的代码,您将看到HTML被烘焙到方法本身中:

public static string ValidationSummary(this HtmlHelper htmlHelper, string message, IDictionary<string, object> htmlAttributes) {
    // Nothing to do if there aren't any errors
    if (htmlHelper.ViewData.ModelState.IsValid) {
        return null;
    }

    string messageSpan;
    if (!String.IsNullOrEmpty(message)) {
        TagBuilder spanTag = new TagBuilder("span");
        spanTag.MergeAttributes(htmlAttributes);
        spanTag.MergeAttribute("class", HtmlHelper.ValidationSummaryCssClassName);
        spanTag.SetInnerText(message);
        messageSpan = spanTag.ToString(TagRenderMode.Normal) + Environment.NewLine;
    }
    else {
        messageSpan = null;
    }

    StringBuilder htmlSummary = new StringBuilder();
    TagBuilder unorderedList = new TagBuilder("ul");
    unorderedList.MergeAttributes(htmlAttributes);
    unorderedList.MergeAttribute("class", HtmlHelper.ValidationSummaryCssClassName);

    foreach (ModelState modelState in htmlHelper.ViewData.ModelState.Values) {
        foreach (ModelError modelError in modelState.Errors) {
            string errorText = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, null /* modelState */);
            if (!String.IsNullOrEmpty(errorText)) {
                TagBuilder listItem = new TagBuilder("li");
                listItem.SetInnerText(errorText);
                htmlSummary.AppendLine(listItem.ToString(TagRenderMode.Normal));
            }
        }
    }
}
publicstaticstringvalidationsummary(此HtmlHelper HtmlHelper、字符串消息、IDictionary htmlAttributes){
//如果没有任何错误,则无需执行任何操作
if(htmlHelper.ViewData.ModelState.IsValid){
返回null;
}
字符串消息跨度;
如果(!String.IsNullOrEmpty(消息)){
标记生成器span标记=新标记生成器(“span”);
spanTag.MergeAttributes(HtmlatAttributes);
span tag.MergeAttribute(“类”,HtmlHelper.ValidationSummaryCssClassName);
spanTag.SetInnerText(消息);
messageSpan=spanTag.ToString(TagRenderMode.Normal)+Environment.NewLine;
}
否则{
messageSpan=null;
}
StringBuilder htmlSummary=新建StringBuilder();
标记生成器无序列表=新标记生成器(“ul”);
unorderedList.MergeAttributes(htmlAttributes);
unorderedList.MergeAttribute(“类”,HtmlHelper.ValidationSummaryCssClassName);
foreach(htmlHelper.ViewData.ModelState.Values中的ModelState ModelState){
foreach(modelState.Errors中的ModelError ModelError){
string errorText=GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext,modelError,null/*modelState*/);
如果(!String.IsNullOrEmpty(errorText)){
标记生成器列表项=新标记生成器(“li”);
listItem.SetInnerText(errorText);
htmlSummary.AppendLine(listItem.ToString(TagRenderMode.Normal));
}
}
}
}

好消息是,MVC是开源的,您可以从中获取源代码,并以任何方式对其进行调整。

或者,您可以通过CSS引用该范围,并将其样式设置为p

这是引用它的方法-您需要相应地设置它的样式:

.validation-summary-errors > span { margin: 0px; }
public static string ValidationSummary(this HtmlHelper htmlHelper, string message, IDictionary<string, object> htmlAttributes) {
    // Nothing to do if there aren't any errors
    if (htmlHelper.ViewData.ModelState.IsValid) {
        return null;
    }

    string messageSpan;
    if (!String.IsNullOrEmpty(message)) {
        TagBuilder spanTag = new TagBuilder("span");
        spanTag.MergeAttributes(htmlAttributes);
        spanTag.MergeAttribute("class", HtmlHelper.ValidationSummaryCssClassName);
        spanTag.SetInnerText(message);
        messageSpan = spanTag.ToString(TagRenderMode.Normal) + Environment.NewLine;
    }
    else {
        messageSpan = null;
    }

    StringBuilder htmlSummary = new StringBuilder();
    TagBuilder unorderedList = new TagBuilder("ul");
    unorderedList.MergeAttributes(htmlAttributes);
    unorderedList.MergeAttribute("class", HtmlHelper.ValidationSummaryCssClassName);

    foreach (ModelState modelState in htmlHelper.ViewData.ModelState.Values) {
        foreach (ModelError modelError in modelState.Errors) {
            string errorText = GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, null /* modelState */);
            if (!String.IsNullOrEmpty(errorText)) {
                TagBuilder listItem = new TagBuilder("li");
                listItem.SetInnerText(errorText);
                htmlSummary.AppendLine(listItem.ToString(TagRenderMode.Normal));
            }
        }
    }
}
.validation-summary-errors > span { margin: 0px; }