1

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

4

1 回答 1

1

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

于 2010-09-13T04:37:13.423 回答