2010-08-11 40 views
1

我最近在我的主頁面中放了一些代碼<% %>代碼塊。注意我已經閱讀了「修復」,要麼移出<head>或使用<%# %>,但它們都不適用於我的應用程序。什麼原因導致「控件集合無法修改,因爲控件包含代碼塊」?

現在奇怪的是,我只在我的一頁上得到這個錯誤。所有其他網頁似乎工作正常,所以實際上導致此錯誤的是什麼?沒有什麼我能想到的,這個網頁是獨一無二的。它像其他工作頁面一樣使用腳本管理器,對此頁面沒有任何特別之處。它有很多自定義控件,因此在這個頁面中查找不同的內容比平常更困難。

那究竟是什麼導致Controls collection cannot be modified because the control contains code blocks異常呢?

+0

您的自定義控件是否包含'<% %>'內的內容,如果是,是否將您的自定義控件動態添加到頁面中?你也提到了移出代碼'';你的問題代碼塊究竟在哪裏? – 2010-08-11 21:13:01

+0

我不知道。我向母版頁添加了一個代碼塊(字面上簡單到'<%/ * codesss * /%>'),現在這個頁面不起作用。 @Cory – Earlz 2010-08-11 21:24:38

+0

你在'<% %>'代碼塊裏面試圖做什麼?這樣我們可以幫助更好的方法 – 2010-08-11 21:34:39

回答

1

如果您有一個帶有<% %>的頁面或控件,並且曾經動態更新控件集合(將控件添加到未在.aspx/.ascx中定義的頁面中),則會觸發此錯誤。爲了解決這個問題我已經使用了<ASP:Literal/>注入,而不是<% %>

+0

我的其他網頁這樣做,但沒有問題。 – Earlz 2010-08-11 21:51:54

+0

如果您的其他頁面沒有動態添加控件,那麼它們不會有問題 - 另外,您可能無法控制動態控件(取決於您使用的UI框架/幫助程序) – 2010-08-11 22:04:33

+0

您也可以使用'PlaceHolder'控件,或者其他任何數量的控件。如果UserControl引起問題,我通常最終將它們呈現在服務器端並將它們的HTML注入到頁面中,因爲我所做的大部分操作都是支持AJAX的交互性和其他功能。 – 2010-08-12 02:56:59

2

事情數據可以去錯了,當某些代碼試圖將控件添加到包含<% ... %><%= ... %>代碼塊標記(在這種情況下,你<head>標籤)。

例如,當您使用主題時,Page類會自動爲您的主題目錄中的每個CSS文件添加<link>標籤到<head>。但它也可以通過設置Page.Title來觸發。

但是有很多方法可能會導致修改<head>標籤,因此如果沒有進一步的信息(例如堆棧跟蹤),很難給出明確的答案。

1

如果您啓用了主題,可能會導致它啓動。

2

我想出了一些讓我更容易,更直接的東西 - 同時將標籤留在標題所在的位置。

首先,開始與<%#代替<%=代碼塊:

<head id="head1" runat="server"> 
    <title>My Page</title> 
    <link href="css/common.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="<%# ResolveUrl("~/javascript/leesUtils.js") %>"></script> 
</head> 

這改變從回覆於代碼塊中的代碼塊的數據綁定的表達。由於<%#...%>數據綁定表達式不是代碼塊,因此CLR不會投訴。然後,在母版頁的代碼,你會添加以下內容:

protected void Page_Load(object sender, EventArgs e) 
    { 
     Page.Header.DataBind();  
    } 

DataBind方法評估在裝載時在你的頭中的數據綁定的所有表達(S)。

+0

謝謝,這拯救了我的生活 – superjugy 2017-03-02 14:19:31

相關問題