在asp.net mvc视图中将字符串显示为html

Muk*_*rma 86 c# asp.net asp.net-mvc asp.net-mvc-4

我有一个控制器,它生成包含html标记的字符串.现在,当我在视图上显示它时,它显示为包含所有标记的简单字符串.我试图使用Html帮助程序进行编码/解码以正确显示它,但它无法正常工作.

string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";
Run Code Online (Sandbox Code Playgroud)

在我看来,

@Html.Encode(str)
Run Code Online (Sandbox Code Playgroud)

Jar*_*red 155

你很想要使用 @Html.Raw(str)

@Html.Encode接受字符串并确保正确处理所有特殊字符.这些包括空格等字符.

  • @ Html.Raw正是我所寻找的,谢谢你的回答:) (5认同)

Jer*_*ose 34

你应该使用IHtmlString:

IHtmlString str = new HtmlString("<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>");
Run Code Online (Sandbox Code Playgroud)

每当你有模型属性或需要保存HTML的变量时,我觉得这通常是一种更好的做法.首先,它有点清洁.例如:

@Html.Raw(str)
Run Code Online (Sandbox Code Playgroud)

相比:

@str
Run Code Online (Sandbox Code Playgroud)

此外,我还认为它与使用相比更安全一些@Html.Raw(),因为关注您的数据是否是HTML保存在您的控制器中.在您拥有前端开发人员和后端开发人员的环境中,您的后端开发人员可能更加关注哪些数据可以保存HTML值,从而在后端(控制器)中保持这种关注.

我一般尽量避免使用Html.Raw().

值得注意的另一件事是,我不确定你在哪里分配str,但有些事情与我如何实现这一点有关.

首先,这应该在控制器中完成,无论您的解决方案(IHtmlStringHtml.Raw)如何.你应该在你的视图中避免使用这样的逻辑,因为它并不属于那里.

此外,您应该使用您ViewModel的方式获取视图的值(并且再次,理想情况下使用IHtmlString属性类型).看到类似的东西@Html.Encode(str)有点令人担忧,除非你这样做只是为了简化你的例子.


Ath*_*baN 6

您可以使用 @Html.Raw(str)

有关更多信息,请参阅MSDN

返回非HTML编码的标记.

此方法使用IHtmlString类包装HTML标记,该类呈现未编码的HTML.