【发布时间】:2011-08-19 02:44:50
【问题描述】:
我有一个 CheckBoxList,其中包含向导步骤中的员工姓名。当员工被选中并更改了活动步骤时,将调用 Wizard1_ActiveStepChanged 函数并为每个选中的员工动态创建一个 DropDownList 数组。每个 DropDownList 指定员工的条件。 DropDownList 已正确创建。当用户点击提交时,DropDownList 数组被删除,并且无法从数组中拉取任何选定的值。
我知道这是 PostBack 的一个问题,可以使用 ViewState 修复,但我正在尝试找出我可以做些什么来修复它。为 checkboxlist 和 DropDownList 启用 ViewState。
这就是我在 System.Web.UI.Page 类的主体中的内容
private int empcount;
private DropDownList[] DDL_Emp
{
get
{
return (DropDownList[])ViewState["DDL_Emp"];
}
set
{
ViewState["DDL_Emp"] = value;
}
}
相关代码:
protected void Wizard1_ActiveStepChanged(object sender, EventArgs e)
{
if (Request.QueryString["type"] == "Accident" && BulletedList1.Items.Count > 0)
{
this.empcount = 0;
for (int i = 0; i < CBL_EmpInvolved.Items.Count; i++)
{
if (CBL_EmpInvolved.Items[i].Selected)
{
this.empcount++;
}
}
if(this.empcount > 0)
{
this.DDL_Emp = new DropDownList[this.empcount];
for (int i = 0, j=0; i < CBL_EmpInvolved.Items.Count; i++)
{
if (CBL_EmpInvolved.Items[i].Selected)
{
List<ListItem> cond = new List<ListItem>();
cond.Add(new ListItem("Disabled", CBL_EmpInvolved.Items[i].Value));
cond.Add(new ListItem("Diseased - Fatality", CBL_EmpInvolved.Items[i].Value));
cond.Add(new ListItem("On Treatment - Short Term Disability", CBL_EmpInvolved.Items[i].Value));
cond.Add(new ListItem("On Treatment - Long Term Disability", CBL_EmpInvolved.Items[i].Value));
cond.Add(new ListItem("Treated - Back to Work", CBL_EmpInvolved.Items[i].Value));
cond.Add(new ListItem("Treated - Relocated", CBL_EmpInvolved.Items[i].Value));
cond.Add(new ListItem("Treated - Transferred", CBL_EmpInvolved.Items[i].Value));
this.DDL_Emp[j] = new DropDownList();
this.DDL_Emp[j].ID = "DD_LabCondition_" + CBL_EmpInvolved.Items[i].Value;
this.DDL_Emp[j].EnableViewState = true;
this.DDL_Emp[j].Visible = true;
this.DDL_Emp[j].Items.AddRange(cond.ToArray());
this.DDL_Emp[j].Items.Insert(0, new ListItem("-- Select condition of employee: " + CBL_EmpInvolved.Items[i].Text, ""));
PH_LabCondition.Controls.Add(this.DDL_Emp[j]);
j++;
}
}
PH_LabCondition.Visible = true;
MV_LabCondition.Visible = true;
Label1_ReportTitle.Text += "Control Count: " + PH_LabCondition.Controls.Count.ToString();
}
MV_LabCondition.ActiveViewIndex = 1;
MV_LostTime.ActiveViewIndex = 1;
}
}
这段代码现在给我以下错误:
在程序集“System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中的类型“System.Web.UI.WebControls.DropDownList”未标记为可序列化。
我尝试将按钮更改为图像,使用 AutoPostBack 功能。我不知道如何将我的下拉列表数组保存到 ViewState 并在回发后访问它。
【问题讨论】:
标签: asp.net controls postback viewstate dynamic