2016-09-26 61 views
0

同意我的問題是duplicate of this one並且接受的答案也適用於我。讓我澄清爲什麼。控件集合不能被修改,因爲控件包含代碼塊 - 只有當它在頭塊時纔出錯

當我有<%=在頭給出錯誤

當我在<%=身上它作品

當我有<%#在頭工程

我只是想知道所有三種情況的原因。

另外我創建了測試項目來模擬問題,但在這種情況下,所有三種情況都起作用。

我的頁面太大,我無法決定粘貼什麼代碼。

回答

0

<%= %>實際上是在做Response.Write,這實際上是寫符號的響應。到最後的標記是。

現在請注意,您的head標記具有此屬性runat="server"。這使其成爲服務器控制。也就是說,這不是最終的標記,而是一個在控制渲染階段將輸出一些標記給響應的控件。你不能在這個控件上調用Response.Write,因爲它還不是最終的標記。

出於同樣的原因,它會工作/不工作在頁面的主體。如果你把它放在純標記它的工作沒有問題:

<div><%= "Blah" %></div> <%-- works! --%> 

但只要它裏面出現任何與runat="server",你會得到一個錯誤

<div runat="server><%= "Blah" %></div> <%-- error! --%> 
<asp:Panel runat="server"><%= "Blah" %></asp:Panel> <%-- error! --%> 

現在<%# %>是一個不同的野獸。這是一種數據綁定標記,當服務器端控件正在進行數據綁定時正在進行評估。因此在普通標記內是沒有意義的(並且是無效的),並且只要控件綁定到某些數據就可以使用它。在頭文件中使用它並不常見,使用GridViewRepeater是最常見的例子。

+0

我在頭版中使用'<%='在頭版。但很少有內容頁面沒有問題,但很少有內容。 – Imad

+0

@Imad,請再看看答案。這是否是母版頁並不重要。如果你在服務器端控制中或在普通標記中使用它,這只是很重要的 – Andrei

+0

我只是試圖告訴你,服務器控件中的頭標記在多個頁面中使用,並且它不會在所有地方給出問題。 – Imad

相關問題