我有一個頁面上有兩個下拉列表和一個按鈕。所有控件都位於更新面板中。第一個下拉列表(ddl1)包含很多導致巨大視圖狀態的值,所以我禁用了viewstate。在頁面oninit事件中,我在每次回發頁面時填充下拉列表。這一切似乎工作正常,它顯示了所有的值,我可以訪問我的事件處理程序中選定的值。在下拉列表中禁用viewstate會導致問題
ddl1將autopostback屬性設置爲true,因此當其值更改時,第二個下拉列表(ddl2)將填充一些取決於ddl1中的選擇的值。這也可以正常工作,當我在ddl1中選擇一個值時,ddl2中的值會改變。
ddl2沒有禁用viewstate。位於我的兩個下拉列表下的按鈕默認處於禁用狀態,當ddl2的值更改爲除string.empty以外的任何內容時變爲啓用狀態。這是我遇到問題的地方。 ddl2也會執行autopostback,但它似乎會丟失選定的索引/值。當我在代碼中檢查是否啓用或禁用按鈕時,所選索引始終爲0,並且所選值爲string.Empty。
如果我在ddl1上啓用viewstate,這一切工作正常。任何人都可以指出我做錯了什麼?
這裏是由DDL2回發執行的代碼:
protected void AvailableProgramsIndexChanged(object sender, EventArgs e)
{
ToggleMoreInformationButton();
}
private void ToggleMoreInformationButton()
{
if (Request.Browser.Type.Contains("IE"))
{
ToggleIE();
}
else
{
ToggleNonIE();
}
}
private void ToggleIE()
{
if (this.ddlAvailablePrograms.SelectedValue != string.Empty)
{
this.careerInfoLearnMoreSubmit.Enabled = true;
this.careerInfoLearnMoreSubmit.CssClass = "submit nongreyed";
}
else
{
this.careerInfoLearnMoreSubmit.Enabled = false;
this.careerInfoLearnMoreSubmit.CssClass = "submit greyed";
}
}
private void ToggleNonIE()
{
if (this.ddlAvailablePrograms.SelectedValue != string.Empty)
{
this.careerInfoLearnMoreSubmit.Enabled = true;
this.careerInfoLearnMoreSubmit.Style.Remove("opacity");
this.careerInfoLearnMoreSubmit.Style.Add("opacity", "1.0;");
}
else
{
this.careerInfoLearnMoreSubmit.Enabled = false;
this.careerInfoLearnMoreSubmit.Style.Remove("opacity");
this.careerInfoLearnMoreSubmit.Style.Add("opacity", "0.5;");
}
}
代碼不修改DDL2的選定值在所有。
感謝,
B3N
嗨,Jeff,我在上面添加了一些代碼。 – b3n 2010-09-13 04:46:09
從上面的示例中,在您的問題描述中是ddlAvailablePrograms ddl1或ddl2?而且,你是否有page_load中的任何代碼,因爲它也會在回發中執行? – 2010-09-13 05:43:02
ddl2是可用的程序。我沒有包含ddl1的代碼,因爲它工作正常。 page_onload和oninit看起來像這樣: – b3n 2010-09-13 21:51:30