0

我有多个以编程方式添加的复选框。

当它们被点击时,我有一个方法会触发,如果它们被选中,则将它们添加到我定义的列表中,如果它们未被选中,则将它们从列表中删除。

我的问题是,每次我这样做时,列表似乎都会重新创建,因为它变成了空的。

编辑:

一些相关的代码。

    protected void check_clicked(object sender, EventArgs e)
    {
        CheckBox me = ((CheckBox)sender);
        MenuNode m = ((MySpecialEventArgs)(e)).theVar;
        if (me.Checked == true)
        {
            me.BackColor = System.Drawing.Color.AliceBlue;
            checkedIDs.Add(m.ID, m.ID);
        }
        else
        {
            me.BackColor = System.Drawing.Color.YellowGreen;
            checkedIDs.Remove(m.ID);
        }


    }

    protected void button_clicked(object sender, EventArgs e)
    {
        String checkedMenus = "";
        foreach (int menuID in checkedIDs.Values)
        {
            checkedMenus +="'"+ menuID + "'";
        }
     //Do DB Stuff
    }
4

2 回答 2

0

一种选择是将列表存储在 Session 中并使用属性来保存或检索它。请试试:

protected List<int> CheckedIDs
{
    get
    {
        List<int> checkedIDs = new List<int>();
        if (Session["CheckedIDs"] != null)
        checkedIDs = (List<int>)Session["CheckedIDs"];
        return checkedIDs;
    }
    set
    {
        Session["CheckedIDs"] = value;
    }
}

修改 check_Clicked 和 button_clicked :

protected void check_clicked(object sender, EventArgs e)
{
    CheckBox me = ((CheckBox)sender);
    MenuNode m = ((MySpecialEventArgs)(e)).theVar;
    List<int> checkedIDs = CheckedIDs;
    if (me.Checked == true)
    {
        me.BackColor = System.Drawing.Color.AliceBlue;
        checkedIDs.Add(m.ID, m.ID);
    }
    else
    {
        me.BackColor = System.Drawing.Color.YellowGreen;
        checkedIDs.Remove(m.ID);
    }
    CheckedIDs = checkedIDs;
}

protected void button_clicked(object sender, EventArgs e)
{
    String checkedMenus = "";
    List<int> checkedIDs = CheckedIDs;
    for (int i=0; i <  checkedIDs.Count ; i++)
    {
        checkedMenus +="'"+ checkedIDs[i].ToString() + "'";
    }
    //Do DB Stuff
}

希望能帮助到你!

于 2013-07-26T01:27:42.220 回答
0

您是否将您的复选框创建方法包含在 if !Page.IsPostBack 中?您不必将它们存储在会话中,如果我将存储任何内容,则改为将它们存储在 ViewState 中。

于 2013-07-26T03:58:11.527 回答