如何在服务器端进行更改后更新客户端上的CheckBoxes?

时间:2016-07-21 21:17:07

标签: asp.net webforms

我的网络表单上有DropDownListCheckBox。单击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;
}

1 个答案:

答案 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")
    {
        ...
    }

    ...
}