我有一个控制器,它生成一个包含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>";
在我看来,
@Html.Encode(str)
发布于 2013-11-14 22:48:31
您已关闭,您想要使用@Html.Raw(str)
@Html.Encode
接受字符串并确保所有特殊字符都得到正确处理。其中包括诸如空格之类的字符。
发布于 2013-11-14 22:51:01
您应该改用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的模型属性或变量时,我觉得这通常是一种更好的做法。首先,它更干净一些。例如:
@Html.Raw(str)
对比:
@str
此外,我也认为它比使用@Html.Raw()
更安全,因为你的数据是否是HTML的问题被保存在你的控制器中。在有前端开发人员与后端开发人员的环境中,后端开发人员可能更清楚哪些数据可以保存HTML值,从而将此问题保留在后端(控制器)。
只要有可能,我通常尽量避免使用Html.Raw()
。
另一件值得注意的事情是,我不确定您将str
分配到哪里,但有几件事让我担心您可能会如何实现它。
首先,这应该在控制器中完成,而不管您的解决方案(IHtmlString
或Html.Raw
)。你应该在你的视图中避免任何这样的逻辑,因为它并不真正属于那里。
此外,您应该使用ViewModel
来获取视图的值(同样,最好使用IHtmlString
作为属性类型)。看到像@Html.Encode(str)
这样的东西有点令人担忧,除非您只是为了简化示例而这么做。
发布于 2016-01-05 21:08:39
对于MVC中的HTML输入字段,我也遇到了类似的问题。分页的网页只显示该字段的第一个关键字。示例:输入字段:"The quick brown fox“显示的值:"The”
解决方法是将变量放在value语句中的引号中,如下所示:
<input class="ParmInput" type="text" id="respondingRangerUnit" name="respondingRangerUnit"
onchange="validateInteger(this.value)" value="@ViewBag.respondingRangerUnit">
https://stackoverflow.com/questions/19980657
复制相似问题