如何通过c#在HTML . validationsummary()中获得HTML或新行/重载返回
本文关键字:HTML 新行 返回 重载 何通过 validationsummary | 更新日期: 2023-09-27 17:49:42
如果不编写一些疯狂的扩展方法(我不打算这样做),这可能是不可能的。我知道ValidationSummary()
是为了安全而编码的。我只是好奇,如果我错过了一些明显…?
我有一个简单的<%= Html.ValidationSummary() %>
在我的形式。在某些情况下,会抛出错误,如果我能对错误的出现有更多的控制,那就太好了。
例如,当我导入CSV文件时,如果标题不是可接受的格式或包含特殊字符,我会向ValidationSummary()
抛出以下错误:
constraintValidatorContext.AddInvalid(invalidHeaders.Count() == 1
? string.Format("The following column header is invalid: {0}.", badHeaders)
: string.Format("There were multiple invalid column headers including: {0}.", badHeaders), "General");
如果我能在一个列表中显示多个标头就太好了,如下所示:
string.Format("There were multiple invalid column headers including: <li>{0}</li>", badHeaders)
显示HTML。即使我可以在这里或那里扔一个换行,这将是有帮助的('n 'r)…是我不知道什么吗?
换行符在HTML中没有作用,您需要<br />
标记。
你总是可以滚动你自己的,以获得更多的控制输出。下面是该帮助器的MVC2源代码。它基本上是通过
public static MvcHtmlString ValidationSummary(this HtmlHelper htmlHelper, bool excludePropertyErrors, string message, IDictionary<string, object> htmlAttributes) {
if (htmlHelper == null) {
throw new ArgumentNullException("htmlHelper");
}
FormContext formContext = htmlHelper.ViewContext.GetFormContextForClientValidation();
if (formContext == null && htmlHelper.ViewData.ModelState.IsValid) {
return null;
}
string messageSpan;
if (!String.IsNullOrEmpty(message)) {
TagBuilder spanTag = new TagBuilder("span");
spanTag.SetInnerText(message);
messageSpan = spanTag.ToString(TagRenderMode.Normal) + Environment.NewLine;
}
else {
messageSpan = null;
}
StringBuilder htmlSummary = new StringBuilder();
TagBuilder unorderedList = new TagBuilder("ul");
IEnumerable<ModelState> modelStates = null;
if (excludePropertyErrors) {
ModelState ms;
htmlHelper.ViewData.ModelState.TryGetValue(htmlHelper.ViewData.TemplateInfo.HtmlFieldPrefix, out ms);
if (ms != null) {
modelStates = new ModelState[] { ms };
}
}
else {
modelStates = htmlHelper.ViewData.ModelState.Values;
}
if (modelStates != null) {
foreach (ModelState modelState in modelStates) {
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));
}
}
}
}
if (htmlSummary.Length == 0) {
htmlSummary.AppendLine(_hiddenListItem);
}
unorderedList.InnerHtml = htmlSummary.ToString();
TagBuilder divBuilder = new TagBuilder("div");
divBuilder.MergeAttributes(htmlAttributes);
divBuilder.AddCssClass((htmlHelper.ViewData.ModelState.IsValid) ? HtmlHelper.ValidationSummaryValidCssClassName : HtmlHelper.ValidationSummaryCssClassName);
divBuilder.InnerHtml = messageSpan + unorderedList.ToString(TagRenderMode.Normal);
if (formContext != null) {
// client val summaries need an ID
divBuilder.GenerateId("validationSummary");
formContext.ValidationSummaryId = divBuilder.Attributes["id"];
formContext.ReplaceValidationSummary = !excludePropertyErrors;
}
return divBuilder.ToMvcHtmlString(TagRenderMode.Normal);
}
ValidationSummaryValidCssClassName为" validate -summary-errors", ValidationSummaryValidCssClassName为" validate -summary-valid"。