You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core 6 Razor Pages登录错误HTML消息显示为纯文本问题

解决ASP.NET Core 6.0 Razor Pages HTML错误消息不解析的问题

问题原因

  1. 手动编码错误:你在后端调用了WebUtility.HtmlEncode(invalidLogin),这会把<b>这类HTML标签转义成&lt;b&gt;,直接导致消息变成纯文本。
  2. 默认自动编码:Razor Pages自带的验证组件(如asp-validation-summary)会对ModelState中的错误消息自动做HTML编码,即便后端传递原始HTML标签,也会被转义后显示。

解决方案

步骤1:修正后端代码,移除不必要的HTML编码

删掉WebUtility.HtmlEncode调用,直接把带HTML标签的错误消息添加到ModelState:

var invalidLogin = await LockOut(Input.UserUserName, Input.Password);

if (!string.IsNullOrEmpty(invalidLogin))
{
    // 移除HtmlEncode,直接传递原始HTML格式的消息
    ModelState.AddModelError(string.Empty, invalidLogin);
    return Page();
}

注意:如果错误消息包含用户输入的内容(比如用户名),必须单独对用户输入部分编码,避免XSS风险:

// 对用户输入的用户名做HTML编码
var encodedUserName = WebUtility.HtmlEncode(Input.UserUserName);
// 拼接安全的HTML消息
invalidLogin = $"Invalid: <b>{encodedUserName}</b> and/or <b>Password</b>";

步骤2:修改前端页面,用Html.Raw渲染错误消息

默认的asp-validation-summary会自动编码消息,因此需要替换为手动遍历ModelState错误并使用Html.Raw跳过编码:

把原来的验证摘要代码(比如<div asp-validation-summary="All" class="text-danger"></div>)替换为:

@if (!ViewData.ModelState.IsValid)
{
    <div class="text-danger">
        @foreach (var error in ViewData.ModelState.Values.SelectMany(v => v.Errors))
        {
            @Html.Raw(error.ErrorMessage)
            <br />
        }
    </div>
}

这样就能正确解析<b>标签,将"User Name"和"Password"显示为加粗样式。

额外说明

  • 如果想继续使用asp-validation-summary,可以通过自定义标签助手或修改验证模板实现,但手动遍历+Html.Raw是最直接的方案。
  • 务必确保HTML消息中的用户输入部分经过HTML编码,防范跨站脚本攻击(XSS)。

内容的提问来源于stack exchange,提问作者Massey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 10:45:12