如何在ASP.NET MVC Core的ModelState错误消息中添加可点击超链接?
问题:ModelState错误消息中的HTML超链接无法正常渲染
我在控制器中添加带HTML超链接的自定义验证错误消息,但视图里的asp-validation-summary会自动转义HTML代码,导致链接显示为纯文本而非可点击状态。
控制器代码示例:
public IActionResult LaunchItem() { var errorMsg = @"Error: Please click <a href=""https://localhost:44316/Controller/Action"" target=""_blank"">here</a> to fix error."; ModelState.AddModelError("", errorMsg); return View(); }
视图中渲染错误的代码:
<div asp-validation-summary="All" class="text-danger"></div>
实际显示效果是完整的HTML标签文本,而非可点击的链接。
解决方法
方法1:手动遍历错误并输出原始HTML
直接放弃asp-validation-summary,手动遍历ModelState中的错误,用Html.Raw()渲染未转义的HTML内容:
@if (!ViewData.ModelState.IsValid) { <div class="text-danger"> @foreach (var error in ViewData.ModelState.Values.SelectMany(v => v.Errors)) { <p>@Html.Raw(error.ErrorMessage)</p> } </div> }
方法2:自定义标签助手(保留原有用法)
如果想继续使用类似asp-validation-summary的语法,可以自定义标签助手来禁用HTML转义:
- 创建自定义标签助手类:
[HtmlTargetElement("div", Attributes = "asp-validation-summary-raw")] public class ValidationSummaryRawTagHelper : ValidationSummaryTagHelper { public ValidationSummaryRawTagHelper(IHtmlGenerator generator) : base(generator) { } public override void Process(TagHelperContext context, TagHelperOutput output) { base.Process(context, output); // 将转义后的内容转为原始HTML输出 output.Content.SetHtmlContent(output.Content.GetContent()); } }
- 在
_ViewImports.cshtml中注册该标签助手(替换YourAssemblyName为你的项目程序集名称):
@addTagHelper *, YourAssemblyName
- 在视图中使用自定义标签:
<div asp-validation-summary-raw="All" class="text-danger"></div>
内容的提问来源于stack exchange,提问作者LUAN-I JACKSON
相关产品推荐
相关产品推荐

