2010-09-07 91 views
3

最近我開始在我的Web控件中更頻繁地使用<%=。通常我會在Code Behind中設置String屬性,然後將它們吐出到表單上。在WebControl中使用`<%=`是否是一個糟糕的主意

這是一個壞主意嗎?

例如。

代碼背後:

屬性:

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

你能詳細說明你爲什麼認爲這可能是一個壞主意嗎? – Robaticus 2010-09-07 21:20:37

+1

如果您要在CodeBehind中使用ViewModel類型屬性的所有麻煩,爲什麼不移動到MVC? – mwjackson 2010-09-07 21:36:02

+0

其實,我正在轉向新項目的MVC。但我不會重寫舊的。 – Armstrongest 2010-09-08 15:21:39

回答

4

只有當數據沒有被驗證問題。

使用.NET 4的<%: TheBody %>語法是編碼潛在不可信數據的有效方法。在早期版本的框架中,您可以使用<%= HttpUtility.HtmlEncode(TheBody) %>達到相同的效果。

+0

'<%: %>',確切地說:) – 2010-09-07 21:20:38

+0

@丹:謝謝。糾正。 – kbrimington 2010-09-07 21:21:35

2

如果數據來自用戶輸入,這很糟糕,因爲您的站點易受XSS影響。

1

不,這不是問題*,因爲它將被限制在您的控制範圍內。您不必擔心在您的案例中發生任何衝突,但如果您使用ID編寫服務器控件,則可能會遇到問題。

如何使用它,確定(*假設您在將數據分配給變量之前清除了數據)。只要記住,有些時候它可以與標識,控件,腳本等重複的問題...

編輯:如果使用ASP將其分配給您的varible你可以使用HttpUtility.HtmlEncode或之前。 NET 4,您可以使用<%:語法,具體取決於您輸出的內容。今年秋天和aspx做同樣的規則,沒關係,但你只需要小心。這也是ASP.NET MVC的多少使用。這些視圖可以用<%=<%:進行升級顯然,對任何HTML本身使用任何類型的編碼都不會有用。

相關問題