ASP.NET MVC视图中<br>标签转义为文本不换行的解决方法
问题原因
ASP.NET MVC 的 Razor 视图引擎默认会对 @ 语法输出的字符串做HTML自动编码,用来规避XSS注入风险。你直接拼接在字符串里的 <br/> 标签会被编码为 <br/>,因此会作为普通文本显示在页面上,无法被浏览器解析为换行标签。
可行方案
如果要保留现有三元表达式的拼接代码风格,只需要用 Html.Raw() 方法包裹最终拼接的字符串即可。该方法会返回IHtmlString类型对象,Razor引擎遇到这类对象时不会做HTML编码,会直接将内容原样输出到页面响应中。
基础实现代码
@if (member.Employee != null) { <td> @(member.Employee.FullName != null ? member.Employee.FullName : "-" ) </td> <td> @(Html.Raw( member.Employee.AddressLine1 != null ? member.Employee.AddressLine1 + (member.Employee.AddressLine2 != null ? "<br/>" + member.Employee.AddressLine2 : "") : "-" )) </td> @* 其余原有字段逻辑保持不变 *@ }
安全优化版本
如果AddressLine1、AddressLine2是支持用户自主输入的字段,直接输出原始内容存在XSS注入风险,建议先对地址字段内容单独做HTML编码,再拼接<br/>标签,兼顾功能和安全性:
<td> @(Html.Raw( member.Employee.AddressLine1 != null ? Html.Encode(member.Employee.AddressLine1) + (member.Employee.AddressLine2 != null ? "<br/>" + Html.Encode(member.Employee.AddressLine2) : "") : "-" )) </td>
内容的提问来源于stack exchange,提问作者goalie35
相关产品推荐
相关产品推荐

