我有一个页面上有两个下拉列表和一个按钮。所有控件都位于更新面板中。第一个下拉列表(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