最近,我开始在我的Web控件中更频繁地使用<%=
。通常我会在Code Behind中设置String属性,然后将它们吐出到表单上。
这是个坏主意吗?
例如。
代码背后:
属性:
public string TheTitle { get; set; }
public string TheBody { get; set; }
public ContentItem TheContent { get; set; }
public string ContentId {
get
{ return "content" + (TheContent != null) ? TheContent.Id.ToSTring() : "0"; }
}
的Page_Load:
TheTitle = TheContentItem.Title;
TheBody = TheContentItem.Body;
在页面上:
<div id='<%= ContentID %>'>
<h2 class='title'><%= TheTitle ?? "No Title" %></h2>
<p><%= TheBody %></p>
</div>
答案 0 :(得分:4)
只有在未验证数据时才会出现问题。
使用.NET 4的<%: TheBody %>
语法是编码可能不受信任的数据的有效方法。在早期版本的框架中,您可以使用<%= HttpUtility.HtmlEncode(TheBody) %>
来达到同样的效果。
答案 1 :(得分:2)
如果数据来自用户输入,则会很糟糕,因为您的网站容易受到XSS攻击。
答案 2 :(得分:1)
不,这不是问题*因为它将限制在你的控制范围内。您不必担心在您的情况下发生任何冲突,但如果您使用ID编写服务器控件,则可能会遇到问题。
如何使用它,确定(*假设您在将数据分配给变量之前清理了数据)。请记住,有时可能会出现重复ID,控件,脚本等问题......
编辑:在将其分配给varible之前,您可以使用HttpUtility.HtmlEncode
,或者如果使用ASP.NET 4,则可以使用<%:
语法,具体取决于您输出的内容。今年秋天的规则和aspx一样,没关系,但你需要小心。这也是ASP.NET MVC的使用量。可以使用<%=
和<%:
来提升视图。显然,对任何HTML本身使用任何类型的编码都没有用。