在下拉列表中禁用viewstate会导致问题

时间:2010-09-13 00:08:01

标签: asp.net drop-down-menu viewstate partial-postback

我有一个页面,上面有两个下拉列表和一个按钮。所有控件都位于更新面板中。第一个下拉列表(ddl1)包含许多导致巨大视图状态的值,因此我禁用了viewstate。在页面oninit事件中,每次页面回发时都会填充下拉列表。这一切似乎工作正常,它显示所有值,我可以访问我的事件处理程序中的选定值。

ddl1将autopostback属性设置为true,因此当其值更改时,第二个下拉列表(ddl2)将填充一些值,这些值取决于ddl1中的选择。这也可以正常工作,当我在ddl1中选择一个值时,ddl2中的值会发生变化。

ddl2没有禁用viewstate。默认情况下,位于我的两个下拉列表下的按钮被禁用,当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

1 个答案:

答案 0 :(得分:1)

我猜测在回发期间运行的代码正在清除ddl2,因为所选的值没有返回(因为ViewState已关闭)。但是如果没有一些示例代码,那肯定很难说。