2010-12-21 54 views
1

我試圖面板添加爲母版頁的代碼隱藏其他面板的子控件,它是一個簡單的:Controls集合不能修改,因爲該控件包含代碼塊(即<% ... %>)

Panel1.Controls.Add(Panel2) 

然而,當我嘗試這樣做,我得到這個錯誤:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% ... %>). 

有許多是談論其在頭部<%=%>元素,我沒有問題。我一直在從這個頁面中刪除所有<%>元素,但無濟於事,錯誤仍然存​​在。任何人都可以提出一種方法來獲得這個工作?

+0

您可以將代碼發佈爲我坐在XML的一面? Panel1定義看起來像什麼頁面? – 2010-12-21 18:22:44

回答

1

「控件集合無法修改,因爲控件包含代碼塊(即<%...%>)」。錯誤可以說是非常煩人的至少可以說。這是微軟拒絕修正的一個錯誤,因爲有解決方法。當您嘗試從代碼後面動態加載控件時,會發生這種情況,但是頁面源發生衝突。可能會發生幾件事...

注意:Stack Overflow不能很好地處理代碼示例的語法,所以我會用一封信來引用每個答案,並且在後面的文章中,我會嘗試輸入一個例子。但我不想混淆這篇文章,因爲我想說明我的觀點。答:你有一個<%Response.Write(「something」)%>你的頁面源代碼。或者一個<%CodeBehindMethod()%>。刪除它,並創造性地填充它以不同的方式!一種方法是將ASP.NET面板控件(如面板==>在呈現爲HTML時轉換爲div標籤)放到頁面上並動態填充該控件的內部HTML屬性。還有其他的方式來處理這個問題。 B)你正在試圖在你的控件中的內聯腳本塊內部使用jQuery,你也會得到這個。用ASP.NET PlaceHolder標記環繞內嵌的JavaScript代碼塊。就這麼簡單。如果你不這樣做,一些jQuery功能可以工作,但不是全部!如果你在沒有母版頁的情況下使用腳本管理器,我建議你開始使用母版頁以避免以後出現問題。然後使用ASP.NET ContentPlaceHolder作爲您的頭部和身體標記,以使自定義頁面更加輕鬆。當您在母版頁中引用JavaScript文件並且使用腳本管理器時,請務必在ScriptManager標記中添加一個腳本標記。然後在Scripts標籤內部,將一個ScriptReference標籤放置在您的Javascript文件的完整路徑的Path中。請確保在您的Web應用程序根目錄的路徑開始處放置一個tilda和正斜槓「〜/」。許多人將他們的ScriptManager標籤放在他們的控制之中。不要這樣做。把它放在你的主頁上!它使生活更輕鬆。 D)如果A,B或C沒有回答你的問題,那麼我建議剝離你的每一頁和其中的所有控件,並且每次添加一個。如果您擁有巨大的頁面和控件繼承層次(如果您的應用程序沒有Masterpage),祝您好運!你最終會弄清楚是什麼造成的。

5

*示例回答B *

===,錯誤代碼===

<script type="text/javascript"> 
    jQuery(document).ready(
     function() { 
      alert('Hello!'); 
      jQuery("#<%=TxtSampleId.ClientID %>").focus(); 
     } 
    ); 
</script> 

===代碼沒有錯誤===

< ASP:佔位符的id =「dontCare」runat =「server」>

<script type="text/javascript"> 
    jQuery(document).ready(
     function() { 
      alert('Hello!'); 
      jQuery("#<%=TxtSampleId.ClientID %>").focus(); 
     } 
    ); 
</script> 

</ASP:佔位符>

+0

太棒了!,謝謝@MacGyver – 2012-10-27 12:04:16

0

*示例回答C *

===代碼沒有錯誤===

母版的代碼:

< DOCTYPE HTML PUBLIC「 - // W3C // DTD XHTML 1.0 Transitional // EN」「http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」> < meta http-equiv =「X- UA兼容「content =」IE = 7" />

< HTML的xmlns = 「http://www.w3.org/1999/xhtml」>

<標題>堆棧溢出實施例< /標題「

<鏈路rel =「stylesheet」type =「text/css」href =「/ style/jquery-ui-1.8.10.custom.css」>

< asp:ContentPlaceHolder id =「head」runat =「server」> < asp:ContentPlaceHolder>

< /頭>

<體>

<表格ID = 「Form1的」 方法= 「POST」 RUNAT = 「服務器」>

< ASP:ScriptManager的ID = 「什麼」 RUNAT = 「服務器」> <腳本>
< ASP:的ScriptReference路徑= 「〜/腳本/ md5.js」/> < ASP:的ScriptReference路徑= 「〜/腳本/ jQuery的1.4.4.min.js」 /> < asp:ScriptReference Path =「〜/ scripts/jquery-ui-1.8.10.custom.min.js」/> < asp:ScriptReference Path =「〜/ custom_crap。JS」 /> < /腳本> </ASP:的ScriptManager>
< ASP:的ContentPlaceHolder ID = 「身體」 RUNAT = 「服務器」> </ASP:的ContentPlaceHolder>

</FORM>

</BODY> </HTML>

=================================== =================

頁來源:

< ASP:內容RUNAT = 「服務器」 ID = 「headcontent」 ContentPlaceHolderID = 「頭」> ..這裏將網頁的特定的頭文件(JS,CSS等。) </ASP:內容>

< ASP:內容RUNAT = 「服務器」 ID = 「的BodyContent」 ContentPlaceHolderID = 「體」> ..將網頁的特定身體HTML或ASP.NET代碼在這裏 </ASP :內容>

相關問題