如果这是一个愚蠢的问题,请原谅我。我未能找到明确说明的答案。
我很少在我的aspx页面中使用Bind()或Eval(),而是使用以下语法:(假设这是在Repeater控件的ItemTemplate中)
<asp:Label id="lblFirstName" runat="server" Text='<%# Microsoft.Security.Application.AntiXss.HtmlEncode(DataBinder.Eval(Container.DataItem, "FirstName").ToString()) %>
我很久以前就开始这样做了,根本就没有质疑它,但现在我发现这可能是矫枉过正的。现在我正在使用一个在整个地方都使用这种语法的CMS:
<asp:Label id="lblFirstName" runat="server" Text='<%# Bind("FirstName") %>
所以我想知道,基本上,如果我使用Bind()或Eval()运行时会自动HtmlEncode输出吗?我一直在做不必要的编码吗?
答案 0 :(得分:19)
Bind()和Eval()不做任何事情来阻止那种类型的事情并且不进行编码。 <%# %>
样式代码块也没有。
但是,如果您使用的是ASP.NET 4及更高版本,则可以使用<%: %>
块来处理响应写入类型情况,并<%#: %>
处理数据绑定情况。
Scott Guthrie对此有一个很棒的post。