【问题标题】:Html.Encode does not work atleast not as i think it shouldHtml.Encode 至少不能像我认为的那样工作
【发布时间】:2010-09-13 20:34:14
【问题描述】:

在 asp.net mvc 2 视图中,如果为真,我将尝试渲染某些内容。

在下面的代码中,我尝试使用 Html.Encode(x) 将值呈现到页面中,但它没有呈现任何内容。 html.encode的if语句有什么问题?

作品

<%if (!ViewData.ContainsKey("DisplayQtyPrice")) {%>
    <%: entry.Amount %>
  <%}%>

没用

<%if (!ViewData.ContainsKey("DisplayQtyPrice")) {
    Html.Encode(entry.Amount);
  }%>

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    您在代码块中调用 Html.Encode,但这并不意味着将结果写入输出流。试试:

    <%if (!ViewData.ContainsKey("DisplayQtyPrice")) {%>
        <%= Html.Encode(entry.Amount) %>
    <%}%>
    

    或者更短

    <%= ViewData.ContainsKey("DisplayQtyPrice") ? null : Html.Encode(entry.Amount) %>
    

    【讨论】:

    • 我认为 与您在第一个代码块中建议的相同,是的,这是正确的方法
    【解决方案2】:

    问题是您实际上并没有向响应流添加任何内容。 Html.Encode 没有什么问题,但是你需要做这样的事情:

    <%if (!ViewData.ContainsKey("DisplayQtyPrice")) {
        Response.Write(Html.Encode(entry.Amount));
    }%>
    

    编辑:也就是说,我认为你的第一个版本更好,除非你有尖括号的问题:)

    【讨论】:

    • 尖括号没问题,它只是看起来很难看,不能向孩子展示代码,否则我失去了抱怨他们的笔迹的权利:)
    • 只是为了澄清上面的答案: 是 Response.Write(expression) 的简写
    【解决方案3】:

    如果您使用的是 Visual Studio 2008 和/或 .NET 3.5,您必须像这样对输出进行编码:

    不得不这样做是一个拖累 .NET 开发人员谢天谢地通过语法完全消除了这种需要来确保您在 .NET 4 中的 HTML 安全性:

    这仅仅是一个可用性改进;阅读this 以获得完整的绝地学分:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多