我有一个页面,上面有两个下拉列表和一个按钮。所有控件都位于更新面板中。第一个下拉列表 (ddl1) 包含许多导致巨大视图状态的值,因此我禁用了它的视图状态。在页面 oninit 事件中,每次回发页面时,我都会填充下拉列表。这一切似乎都很好,它显示了所有值,我可以在我的事件处理程序中访问选定的值。
ddl1 的 autopostback 属性设置为 true,因此当其值更改时,第二个下拉列表 (ddl2) 会填充一些取决于 ddl1 中的选择的值。这也可以正常工作,当我在 ddl1 中选择一个值时,ddl2 中的值会发生变化。
ddl2 没有禁用视图状态。我的两个下拉列表下的按钮默认禁用,当 ddl2 的值更改为除 string.empty 之外的任何值时启用。这是我遇到问题的地方。ddl2 也会进行自动回发,但它似乎丢失了选定的索引/值。当我在我的代码中检查是否启用或禁用按钮时,所选索引始终为 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