下午好,
我有一个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 :(
}
}
答案 0 :(得分:1)
如果在代码中禁用它,那么当它呈现时它们无法更改选择。 SelectedItem可能为null / Nothing,具体取决于您是否将任何项设置为Selected = true。
无论如何,使用无法使用的下拉列表对我来说没有多大意义。当然,除非根据某些标准启用它,否则它正在等待回发。
您可以在页面加载时使用jQuery禁用它,而.NET也不会关心。无论如何,它都会让您访问或缺少的值,这可能是您可能缺少的。同样,如果您没有在Web表单或代码中设置一个,那么您仍然会遇到没有SelectedItem的问题。
发布代码有助于我们进一步帮助您:)