如何在Asp.net Razor Identity的状态消息中实现换行效果?
问题原因
你遇到的换行失效是两个原因共同导致的:
- Razor默认会对输出的文本内容做HTML编码,
\n、Environment.NewLine属于文本换行符,默认在HTML标签中不会被解析为换行,只有设置了white-space: pre-line这类CSS属性才会生效 - 你同时调用了Identity自带的
StatusMessage分部视图和自定义的p标签,实际生效展示的是默认分部视图的内容,自带分部视图没有添加对应的换行CSS,也没有处理换行符逻辑
可行方案
方案1:使用HTML<br>标签实现换行(最简单)
直接在后台拼接HTML换行标签,输出时用Html.Raw禁止Razor编码即可:
- 后台.cs代码调整:
if(user.WeeklyReminders != Input.WeeklyReminders) { StatusMessage = "Weekly Reminders email Notifications have been changed. <br>"; } StatusMessage += "Sent";
- 页面输出调整:
如果是用自定义的p标签,修改为:
<p>@Html.Raw(Model.StatusMessage)</p>
如果要沿用自带的StatusMessage分部视图,找到Views/Shared/StatusMessage.cshtml文件,将里面的输出代码同样改为@Html.Raw(Model)即可。
方案2:保留文本换行符,添加CSS适配(更安全,避免XSS风险)
如果不想用Html.Raw带来的潜在跨站脚本风险,就保留\n或者Environment.NewLine的写法,确保展示StatusMessage的标签添加white-space: pre-line样式:
- 后台代码不用改,保持你原来的
\n拼接逻辑即可 - 如果你用自带分部视图,修改
Views/Shared/StatusMessage.cshtml,给包裹内容的标签添加样式:
<p style="white-space: pre-line">@Model</p>
调整后可以按F12打开浏览器开发者工具,选中状态消息元素,确认white-space: pre-line样式已生效,清理缓存刷新即可看到换行效果。
内容的提问来源于stack exchange,提问作者cbas007
相关产品推荐
相关产品推荐

