在asp.net mvc视图中将string显示为html
我有一个控制器生成包含html标记的string。现在,当我在视图上显示它时,它显示为包含所有标记的简单string。 我试图使用Html助手编码/解码来正确显示它,但它不工作。
string str= "<a href="/Home/Profile/seeker">seeker</a> has applied to <a href="/Jobs/Details/9">Job</a> floated by you.</br>";
在我看来,
@Html.Encode(str)
你很接近你想用@Html.Raw(str)
@Html.Encode
需要string,并确保所有的特殊字符处理正确。 这些包括空格等字符。
你应该使用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>");
无论何时你有模型属性或需要保存HTML的variables,我觉得这通常是一个更好的做法。 首先,它有点干净。 例如:
@Html.Raw(str)
相比:
@str
另外,我认为与使用@Html.Raw()
,它更安全一些,因为您的数据是否是HTML的担心会保留在您的控制器中。 在有前端开发者和后端开发者的环境中,后端开发人员可能会更关注哪些数据可以容纳HTML值,从而将这种担忧保留在后端(控制器)中。
我通常尽量避免使用Html.Raw()
。
另一件值得注意的事情是,我不确定你在哪里分配str
,但有几件事情关注你如何实现这一点。
首先,这应该在控制器中完成,而不pipe你的解决scheme( IHtmlString
或Html.Raw
)。 你应该避免在你看来这样的逻辑,因为它不属于那里。
另外,你应该使用你的ViewModel
来获取你的视图的值(最好使用IHtmlString
作为属性types)。 看到像@Html.Encode(str)
这样的东西是有点关注的,除非你这样做只是为了简化你的例子。
你可以使用@Html.Raw(str)
有关详情,请参阅MSDN
返回非HTML编码的标记。
此方法使用IHtmlString类包装HTML标记,该类将呈现未编码的HTML。
我有一个MVC中的HTMLinput字段类似的问题。 网页只显示该字段的第一个关键字。 例如:input字段:“快速棕色狐狸”显示值:“The”
决议是把variables放在价值声明中,如下所示:
<input class="ParmInput" type="text" id="respondingRangerUnit" name="respondingRangerUnit" onchange="validateInteger(this.value)" value="@ViewBag.respondingRangerUnit">