在WebControl中使用`<%=`是不错的主意

时间:2010-09-07 21:15:32

标签: c# asp.net declarative

最近,我开始在我的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>

3 个答案:

答案 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本身使用任何类型的编码都没有用。