我的网络表单上有DropDownList
和CheckBox
。单击DropDownList
后,此事件将发回服务器。在服务器端调用DropDownList_SelectedIndexChanged
事件。在该事件处理程序中,我有CheckBox.Checked = true
,但我无法在客户端创建页面以反映此更改(CheckBox.Checked = true
)。我该如何实现这一目标?或者我错误的方向是使用DropDownList
的事件处理程序更新CheckBox
,因为页面首先重新加载然后调用DropDownList_SelectedIndexChanged
?
页面加载方法:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.DropDownList1.Items.Clear();
AddItemsToDropDownList();
}
}
DropDownList选择索引已更改事件处理程序:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
var selected = this.DropDownList1.SelectedItem.Text;
CheckBox checkBox = GetCheckBoxToBeSetByText(selected);
checkBox.Checked = true;
}
答案 0 :(得分:0)
行。发现了这个问题。实际上我的原帖中的代码没有任何问题。但是为了在发布时制作最小的样本,我删除了一些"额外的"码。以下是"完整"代码(好的,好的,我仍然删除了一些代码)。如您所见,我将CheckBox放入静态字典中。每次调用SelectedIndexChanged
事件处理程序时,它都会修改该静态字典中的CheckBox,这意味着它修改了从上一个会话创建的CheckBox对象? (此处仍不清楚)每次收到回发消息时,都会创建一组新的CheckBox对象。如果这已经为所有人所知,请耐心等待,因为到目前为止我只有两天的网络开发经验。
private static Dictionary<Environment, CheckBox> EnvironmentsCheckBoxes;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
EnvironmentsCheckBoxes = new Dictionary<Environment,CheckBox>();
EnvironmentsCheckBoxes.Add(Environment.Dev1, this.Dev1_CheckBox);
EnvironmentsCheckBoxes.Add(Environment.Dev2, this.Dev2_CheckBox);
EnvironmentsCheckBoxes.Add(Environment.QA, this.QA_CheckBox);
EnvironmentsCheckBoxes.Add(Environment.QA2, this.QA2_CheckBox);
EnvironmentsCheckBoxes.Add(Environment.Demo, this.Demo_CheckBox);
EnvironmentsCheckBoxes.Add(Environment.Prod, this.Prod_CheckBox);
EnvironmentsCheckBoxes.Add(Environment.UAT, this.UAT_CheckBox);
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
var selected = this.DropDownList1.SelectedItem.Text;
if (selected == "Dev1")
{
EnvironmentsCheckBoxes[Environment.Dev1].Checked = true;
}
else if (selected == "Dev2")
{
...
}
...
}