2011-02-14 8 views
3

我正在使用asp mvc 3.当我使用默认的html-helpers构建我的视图时,标记属性中的html编码存在一个问题:“大于” - 标志未编码。在ASP.NET MVC中不完美的HTML编码?

所以这个代码

<%: Html.TextBox("TestText", "<Test>") %> 

产生这样的输出

<input id="TestText" name="TestText" type="text" value="&lt;Test>" /> 

是否有任何理由为什么值属性是不完整的编码或这是一个错误? 或者是否有任何方式即使在标签属性中也使用完整编码?

感谢名单, 迈克尔

回答

3

你误解了<%:标签。 <%:标签仅编码正常的string,而不是HtmlString,由Html.TextBox帮助器返回。

例子:

<%: Html.TextBox("TestText", "<Test>") %> 
<%= Html.TextBox("TestText2", "<Test>") %> 

两个语句返回在问题中提到的相同的文本值。现在考虑这个说法。

<%: "<Test>" %> 

这条语句编码,就像现在普通的字符串被传递一样。

编辑:

检查MVC的source code后,HttpUtility.HtmlAttributeEncode在引擎盖下调用。它最小将字符串转换为HTML编码的字符串。

+0

不 - 我不会误解<%:标签,<%=标签。 但我想知道为什么<%: "“%>编码正确,而我的例子中的值编码为”< Test>“。我不认为洞标记是编码的 - 我只是期望属性的值是全编码 – Michael 2011-02-15 09:44:16

+0

@Michael我已经更新了答案 – Adeel 2011-02-15 10:52:27

1

“<test>”正在被HTML编码。大于'>'的字符本身是无害的,这就是为什么它没有被转换成为&gt;