這個錯誤的長相是這樣的

ControlCollection.Add

    因為字太長,所以標題就刪掉了一些。

 

    原因是當開發人員在aspx中寫了inline code,例如<%=…%>之後,ControlCollection集合就會變成唯讀的,所以不能使用ControlCollection類別中的Add()方法 or AddAt()方法。以下是測試的程式碼: 

<form id="form1" runat="server">
<div id="div1" runat="server">
    <%="readonly" %>
</div>
<div id="div2" runat="server">
</div>
</form>

 


protected void Page_Load(object sender, EventArgs e)
{
    try {
        div1.Controls.Add(new Button());
    } catch { Response.Write("div1不能加入控制項"); }
 
    try {
        div2.Controls.Add(new Button());
    } catch { Response.Write("div2不能加入控制項"); }
}

測試結果:

    div1不能動態加控制項進去,但div2可以。

解決辦法:

    1.不要動態加控制項 (廢話)

    2.不要用<%…%> (還是廢話)

    3.用其它容器處理。這個方法說穿了也是1跟2的變形。以上面的情況來說,會變成下面這樣

 


<form id="form1" runat="server">
<div id="div1" runat="server">
    <span id="span1" runat="server">
        <%="readonly"%>
    </span>
</div>
<div id="div2" runat="server">
</div>
</form>

 


protected void Page_Load(object sender, EventArgs e)
{
    try {
        div1.Controls.Add(new Button());
    } catch { Response.Write("div1不能加入控制項"); }
 
    try {
        div2.Controls.Add(new Button());
    } catch { Response.Write("div2不能加入控制項"); }
}

如此一來,div1.Controls就不再是唯讀集合,所以可以任意的呼叫Controls.Add()方法。

arrow
arrow
    全站熱搜

    AnferneeHardaway 發表在 痞客邦 留言(0) 人氣()