在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( IHtmlStringHtml.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">