ASP.NET Core 2.2(非MVC):如何用Input Tag Helper显示Raw HTML内容
解决ASP.NET Core中展示HTML格式文本的问题
首先得明确:input表单控件本身会自动对内容进行HTML编码,所以不管你怎么设置asp-format或者尝试在asp-for里用Html.Raw,都没法让它渲染出原始HTML——它只会把HTML标签转成<、>这类实体字符显示出来,这是input控件的特性决定的。
你之前尝试的asp-for=@Html.Raw(Car.Description)报错,是因为asp-for属性接受的是模型属性表达式(比如Car.Description),而不是已经渲染好的HTML字符串,所以这种写法本身就不符合Tag Helper的使用规则。
正确的实现方案
既然要展示原始HTML,我们需要把input替换成可以直接渲染HTML的容器元素(比如div或span),同时保留原来的样式类保证页面布局一致。具体修改如下:
<div class="form-group row"> <div class="col-2"> <label asp-for="Car.Description"></label> </div> <div class="col-10"> <!-- 用div替换input,添加form-control保持样式,用Html.Raw输出原始HTML --> <div class="form-control" readonly>@Html.Raw(Model.Car.Description)</div> </div> </div>
补充说明
- 样式保持:
form-control类会给div加上和input一致的边框、内边距等样式,视觉上和原来的disabled input几乎没区别; - 安全提示:如果
Car.Description的内容来自用户输入,直接用Html.Raw会有XSS注入风险,建议先对内容进行安全过滤(比如使用Microsoft.AspNetCore.Html.HtmlEncoder的相关方法),确保内容可信后再渲染; - 交互控制:div本身默认不可编辑,若需要完全禁止用户交互,可以额外添加CSS样式
pointer-events: none;。
内容的提问来源于stack exchange,提问作者1 Zero 3 Tech
相关产品推荐
相关产品推荐

