某一天在網(wǎng)上看到有人寫了這樣一段代碼:
PRotected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DropDownList1.AutoPostBack = true;
}
ArrayList address = new ArrayList();
address.Add("美國");
address.Add("中國");
address.Add("日本");
DropDownList1.DataSource = address;
DropDownList1.DataBind();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
switch(DropDownList1.SelectedValue)
{
case "中國":
{
ArrayList china_address = new ArrayList();
china_address.Add("湖南");
china_address.Add("廣東");
china_address.Add("廣西");
DropDownList2.DataSource = china_address;
DropDownList2.DataBind();
break;
}
case "美國":
{
ArrayList american_address = new ArrayList();
american_address.Add("洛杉磯");
american_address.Add("圣安德列斯");
DropDownList2.DataSource = american_address;
DropDownList2.DataBind();
break;
}
case "日本":
{
ArrayList japan_address = new ArrayList();
japan_address.Add("神戶");
japan_address.Add("大板");
DropDownList2.DataSource = japan_address;
DropDownList2.DataBind();
break;
}
}
}
然后,就出問題了。
第一次打開頁面結(jié)果如:

然后選擇中國,結(jié)果如:

選擇日本呢?結(jié)果仍然是:

這個問題的所在,就是那個提問的人沒有搞明白IsPostBack的概念,這也許是很多初學(xué)者容易混淆的一個概念。對于下拉菜單里的數(shù)據(jù)只需第一次加載頁面程序時綁定就可以。象上邊的例子寫在If(!IsPostBack)代碼塊外邊,這樣,每次服務(wù)器響應(yīng)客戶端回發(fā)時都會重新綁定數(shù)據(jù)源,因此也就會出現(xiàn)上邊的錯誤結(jié)果。
查查msdn,上邊有IsPostBack的定義:獲取一個值,該值指示該頁是否正為響應(yīng)客戶端回發(fā)而加載,或者它是否正被首次加載和訪問。如果是為響應(yīng)客戶端回發(fā)而加載該頁,則為 true;否則為 false。
“為相應(yīng)客戶端回發(fā)而加載”,注意,這里的客戶端的回發(fā)是指服務(wù)器端響應(yīng)客戶端的回發(fā),這也就決定了該屬性是由服務(wù)器控件的事件所引起。 對于javascript客戶端腳本代碼,由于只是運行在客戶端,從而執(zhí)引發(fā)不了該屬性的執(zhí)行。
因此上邊的例子,我們將代碼:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DropDownList1.AutoPostBack = true;
}
ArrayList address = new ArrayList();
address.Add("美國");
address.Add("中國");
address.Add("日本");
DropDownList1.DataSource = address;
DropDownList1.DataBind();
}
改為:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DropDownList1.AutoPostBack = true;
ArrayList address = new ArrayList();
address.Add("美國");
address.Add("中國");
address.Add("日本");
DropDownList1.DataSource = address;
DropDownList1.DataBind();
}
}
ok,現(xiàn)在的結(jié)果是我們想要的結(jié)果了,具體的結(jié)果如下:
選中國后,結(jié)果:

選日本后,結(jié)果:

選擇美國后,結(jié)果:

轉(zhuǎn)自:http://blog.csdn.net/tangjunping/article/details/4372067
新聞熱點
疑難解答