Html.Encode 至少不能像我认为的那样工作

Posted

技术标签:

【中文标题】Html.Encode 至少不能像我认为的那样工作【英文标题】:Html.Encode does not work atleast not as i think it should 【发布时间】: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);
  %>

【问题讨论】:

【参考方案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 以获得完整的绝地学分:

【讨论】:

以上是关于Html.Encode 至少不能像我认为的那样工作的主要内容,如果未能解决你的问题,请参考以下文章

无法理解 size_hint。为啥这个 .kv 简单的代码不能像我预期的那样工作?

Python handlers.TimedRotatingFileHandler旋转不能像我预期的那样工作

dofile和require不能像我预期的那样工作

这个节点不像我想象的那样工作?

Clickhouse:runningAccumulate() 不像我预期的那样工作

sleep() 不像我预期的那样工作