【问题标题】:Display string as html in asp.net mvc view在 asp.net mvc 视图中将字符串显示为 html
【发布时间】:2013-11-27 15:22:39
【问题描述】:

我有一个控制器,它生成一个包含 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)

【问题讨论】:

  • 我猜Html.Raw 应该会有所帮助。
  • 另外我认为你可以使用HtmlStrin 类,如HtmlString str = new HtmlString("&lt;span&gt;Some HTML here&lt;/span&gt;");

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

我最近遇到了类似的问题,谷歌把我带到了这里,所以我把这个答案放在这里,以防其他人也在这里,为了完整性。

我注意到,当我 html 格式错误时,我实际上 我的所有 html 标签都被剥离了只剩下非标签内容。我特别有一个表缺少起始表标记,然后我的整个字符串中的所有 html 标记都被完全撕掉了。

所以,如果上述方法不起作用,而您仍然摸不着头脑,那么还请检查您的 html 是否有效。

我注意到,即使在我让它工作之后,MVC 也会在我没有的地方添加 tbody 标签。这告诉我正在进行清理(MVC 5),并且当它不能发生时,它会删除所有/一些标签。

【讨论】:

    【解决方案2】:

    我对 MVC 中的 HTML 输入字段也有类似的问题。该网页仅显示该字段的第一个关键字。 示例:输入字段:“The quick brown fox” 显示值:“The”

    解决方法是在 value 语句中将变量放在引号中,如下所示:

    <input class="ParmInput" type="text" id="respondingRangerUnit" name="respondingRangerUnit"
           onchange="validateInteger(this.value)" value="@ViewBag.respondingRangerUnit">
    

    【讨论】:

      【解决方案3】:

      您应该改用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 分配到哪里,但有几件事情让我担心您可能会如何实现它。

      首先,无论您的解决方案如何(IHtmlStringHtml.Raw),这都应该在控制器中完成。在你看来,你应该避免任何这样的逻辑,因为它并不真正属于那里。

      此外,您应该使用 ViewModel 来获取视图的值(同样,最好使用 IHtmlString 作为属性类型)。看到像 @Html.Encode(str) 这样的东西有点令人担忧,除非你这样做只是为了简化你的例子。

      【讨论】:

      • 我想指出控制器用于路由,而不是数据存储。此外,您的后端开发人员应该比更改代码的现有合约更清楚。 UI 应该绑定到模型,如果模型发生剧烈变化,您的单元测试应该会中断。
      • 感谢您的回答。我喜欢它。
      • 是的,这个答案好多了,我最初使用 Html.Raw,但是当我阅读这个答案时,我立即切换了
      【解决方案4】:

      你想使用@Html.Raw(str)

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

      【讨论】:

      • @Html.Raw 正是我正在寻找的,感谢您的回答:)
      • @Jerad Rose 提到的 IHtmlString 更好
      【解决方案5】:

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

      更多信息请见MSDN

      返回非 HTML 编码的标记。

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

      【讨论】:

        猜你喜欢
        • 2017-02-25
        • 2014-09-20
        • 2014-10-15
        • 2011-01-28
        • 1970-01-01
        • 2016-10-10
        相关资源
        最近更新 更多