У меня есть CheckBoxList, который содержит имена сотрудников на шаге мастера.Когда сотрудники выбираются и активный шаг изменяется, вызывается функция Wizard1_ActiveStepChanged, которая динамически создает массив DropDownList для каждого выбранного сотрудника.Каждый DropDownList указывает состояние сотрудника.DropDownList создан правильно.Когда пользователь нажимает кнопку «Отправить», массив DropDownList удаляется, и из массива невозможно извлечь выбранные значения.
Я понимаю, что это проблема с PostBack и может быть исправлена с помощью ViewState, но я пытаюсь понятьчто я могу сделать, чтобы это исправить.ViewState включен для списка флажков и DropDownList.
Это то, что у меня есть в теле моего класса 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.UI.WebControls.DropDownList' в сборке 'System.Web, версия = 4.0.0.0,Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'не помечена как сериализуемая.
Я пытался изменить кнопки на изображения, играя с функцией AutoPostBack.Я заблудился о том, как сохранить мой выпадающий список в ViewState и получить к нему доступ после обратной передачи.