2010-09-13 30 views
1

我有一個頁面上有兩個下拉列表和一個按鈕。所有控件都位於更新面板中。第一個下拉列表(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

回答

1

我猜回發期間運行的代碼被清理掉DDL2因爲選擇的值不會回來了(因爲ViewState中是關閉的)。但沒有一些示例代碼,確實很難說。

+0

嗨,Jeff,我在上面添加了一些代碼。 – b3n 2010-09-13 04:46:09

+0

從上面的示例中,在您的問題描述中是ddlAvailablePrograms ddl1或ddl2?而且,你是否有page_load中的任何代碼,因爲它也會在回發中執行? – 2010-09-13 05:43:02

+0

ddl2是可用的程序。我沒有包含ddl1的代碼,因爲它工作正常。 page_onload和oninit看起來像這樣: – b3n 2010-09-13 21:51:30