当后面的代码中的Enabled = False时,无法更改DropDownList SelectedValue

时间:2013-07-05 21:22:15

标签: c# javascript html asp.net visual-studio-2010

下午好,

我有一个DropDownList,我在OnPageLoad后面的代码中设置Enabled = false。稍后当我按下页面上的保存按钮时,我尝试提取数据,并从禁用的DropDownList中获取一个奇怪的值,并从Enabled DropDownList中获取正确的值。

我的问题是,如何禁用DropDownList OnPageLoad,以便用户无法更改数据,但仍然可以修改代码隐藏文件中的数据并在需要时提取它?我看到enabled属性设置了只读标志,我尝试在修改它的数据之前启用下拉,但它没有用。有什么想法吗?

代码背后:

    protected void Page_Load(object sender, EventArgs e)
    {  
        for (int i = 1; i <= Convert.ToInt32(txtNumPrizes.Text.Trim()); i++)
        {
            DropDownList dl = new DropDownList();
            bool disableRow = true; //example

            dl.ID = "DDPrize" + i.ToString();
            dl.DataSourceID = "SqlDataSource1";
            dl.DataTextField = "PrizeName";
            dl.DataValueField = "PrizeID";
            Panel1.Controls.Add(dl);
            dl.DataBind();
            if (disableRow == true)
            {
                dl.Enabled = false;
            }

        } 
    }

    protected void Page_PreRender(object sender, EventArgs e)
    { 
        for (int i = 1; i <= Convert.ToInt32(txtNumPrizes.Text.Trim()); i++)
        {
            DropDownList dd = (DropDownList)Panel1.FindControl("DDPrize" + i.ToString());

            //disable the row if prize was already assigned to a player
            int place = 1; //example

            int selectedValue = DropDownSelect(i, place, GetTournamentID());
            dd.SelectedValue = selectedValue.ToString(); //sets properly here

        } 
    }
        protected void btnSave_Click(object sender, EventArgs e)
        {
            for (int i = 1; i <= numPrizes; i++)
            {
                DropDownList dd = (DropDownList)Panel1.FindControl("DDPrize" + i.ToString());
                string key = dd.SelectedValue;//here is where we can't get the selected value :(
            }

        }

1 个答案:

答案 0 :(得分:1)

如果在代码中禁用它,那么当它呈现时它们无法更改选择。 SelectedItem可能为null / Nothing,具体取决于您是否将任何项设置为Selected = true。

无论如何,使用无法使用的下拉列表对我来说没有多大意义。当然,除非根据某些标准启用它,否则它正在等待回发。

您可以在页面加载时使用jQuery禁用它,而.NET也不会关心。无论如何,它都会让您访问或缺少的值,这可能是您可能缺少的。同样,如果您没有在Web表单或代码中设置一个,那么您仍然会遇到没有SelectedItem的问题。

发布代码有助于我们进一步帮助您:)