2010-09-13 31 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