可以';t在codeehind中,当Enabled=False时,更改DropDownList SelectedV

本文关键字:False Enabled 更改 SelectedV DropDownList 可以 codeehind | 更新日期: 2023-09-27 18:21:19

下午好,

我有一个DropDownList,我正在OnPageLoad后面的代码中设置Enabled=false。稍后,当我按下页面上的保存按钮时,我试图提取数据,并从禁用的DropDownList中得到一个奇怪的值,从启用的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 :(
            }
        }

可以';t在codeehind中,当Enabled=False时,更改DropDownList SelectedV

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

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

您可以在页面加载时使用jQuery禁用它,而.NET不会在意。不管怎样,它都会让您访问值或缺少值,而这正是您可能缺少的。同样,如果您没有在web表单或代码中设置SelectedItem,您仍然会遇到没有SelectedItem的问题。

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