這個錯誤的長相是這樣的
因為字太長,所以標題就刪掉了一些。
原因是當開發人員在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()方法。
全站熱搜
留言列表