有没有办法自定义validationSummary,以便它可以输出锚标签,HREF 是显示摘要中验证消息的字段名称?这样,使用 jquery,我可以添加在验证摘要上单击锚标记时聚焦该字段的 onclick 事件。
这主要是针对视障人士,所以当他们有错误时,验证摘要会聚焦,他们会跳转到错误条目,带有字段标签的锚标签会聚焦,屏幕阅读器会先阅读锚然后是消息,然后他们可以单击在锚点上专注于错误的领域。
<a href="#First_Name">名字</a> - 请输入您的名字。
谢谢。
有没有办法自定义validationSummary,以便它可以输出锚标签,HREF 是显示摘要中验证消息的字段名称?这样,使用 jquery,我可以添加在验证摘要上单击锚标记时聚焦该字段的 onclick 事件。
这主要是针对视障人士,所以当他们有错误时,验证摘要会聚焦,他们会跳转到错误条目,带有字段标签的锚标签会聚焦,屏幕阅读器会先阅读锚然后是消息,然后他们可以单击在锚点上专注于错误的领域。
<a href="#First_Name">名字</a> - 请输入您的名字。
谢谢。
我认为框架内没有任何功能,因此您需要使用自定义扩展方法。例如:
public static string AccessibleValidationSummary(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 (string key in htmlHelper.ViewData.ModelState.Keys)
{
ModelState modelState = htmlHelper.ViewData.ModelState[key];
foreach (ModelError modelError in modelState.Errors)
{
string errorText = htmlHelper.ValidationMessage(key);
if (!String.IsNullOrEmpty(errorText))
{
TagBuilder listItem = new TagBuilder("li");
TagBuilder aTag = new TagBuilder("a");
aTag.Attributes.Add("href", "#" + key);
aTag.InnerHtml = errorText;
listItem.InnerHtml = aTag.ToString(TagRenderMode.Normal);
htmlSummary.AppendLine(listItem.ToString(TagRenderMode.Normal));
}
}
}
unorderedList.InnerHtml = htmlSummary.ToString();
return messageSpan + unorderedList.ToString(TagRenderMode.Normal);
}
这是使用框架内的现有扩展方法并更改插入到列表中的标记。这是一个快速示例,在使用它之前需要考虑一些事项:
html.ValidationMessage
. 如果您需要对消息进行编码,则需要包含 so 代码以提供默认消息和任何本地化要求。html.ValidationSummary()
您需要创建相关签名并调用提供的方法。