我有一個非常動態的Web應用程序,它是在運行時動態創建的控件。多個動態創建的事件與處理程序! (ID問題)
這是我的代碼解決我的問題的第一個需要的部分。
這是在一個for循環,本質上它創建了多個複選框的ID和事件處理程序。
// All I am doing here is incrementing our session counter so we can increment our ID
int id = Convert.ToInt32(Session["id"]);
id++;
Session["id"] = id;
// Now I create my checkbox
chkDynamic = new CheckBox();
chkDynamic.Text = "hey";
string chk = "chk" + id.ToString();
chkDynamic.ID = chk;
chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
Panel1.Controls.Add(chkDynamic);
下一節是我們的習慣,甚至處理
protected void chkDynamic_CheckedChanged(object sender, EventArgs e)
{
if (((CheckBox)sender).Checked)
Response.Write("you checked the checkbox :" + this.chkDynamic.ID);
else
Response.Write("checkbox is not checked");
}
這令我奇怪的事情。是,這將完全正常工作,如果我改變:
string chk = "chk" + id.ToString();
要:
string chk = "chk";
但我們當然碰上「具有相同ID的多個控件」
我的問題是越來越這與獨特的ID一起工作!另外一些ODD信息可能會有所幫助。如果我將它從循環中取出,並手動添加具有不同ID的複選框,它也可以工作。這是令人震驚:(
chkDynamic = new CheckBox();
chkDynamic.Text = "hey";
// string chk = "chk" + id.ToString();
chkDynamic.ID = "hey1";
chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
Panel1.Controls.Add(chkDynamic);
chkDynamic = new CheckBox();
chkDynamic.Text = "hey";
// string chk = "chk" + id.ToString();
chkDynamic.ID = "hey2";
chkDynamic.CheckedChanged += new EventHandler(chkDynamic_CheckedChanged);
Panel1.Controls.Add(chkDynamic);
我也調試我的程序,並存儲在Session [「ID」]的值不爲空,也沒有腐敗,始終保持0值呢!
謝謝。爲尋找傢伙/加爾斯我真的卡在這個
PS - !很抱歉,我們沒有任何錯誤事件只是不火,除非我硬編碼ID的
你得到的錯誤是什麼?或者他們只是不渲染? – simonlchilds
@csharpsi對不起。他們是沒有錯誤的。除非我硬編碼ID,否則事件不會啓動。 – clamchoda
原因可能是因爲每個回發你都分配不同的ID - 控件必須重新分配相同的ID每次回發。 –