保留在SelectedIndexChanged

时间:2018-08-21 04:14:57

标签: c# asp.net

您好第一次在这里发帖,对不起,如果我有点含糊。

所以我正在构建一个ASP.NET Web应用程序,并且正在使用DropDownList生成CheckBoxList供用户检查。选中所需复选框后,他们将按一个按钮,该按钮将根据选中的复选框执行功能。

我的问题出在按下按钮后页面回发时,这意味着复选框的选择标准丢失了,因为我正在重新生成按下按钮时的CheckBoxList。

我的click事件击中了SelectedIndexChanged事件并在DropDownList上设置了选定的索引,因此它保留了选定的索引/值并再次生成CheckBoxList,但是我将如何保留复选框的状态?

再次,很抱歉,如果这有点模棱两可或只是一个愚蠢的问题。 谢谢!

编辑:

以下是我的代码和我要执行的操作的基本表示形式:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        //Populate dropdown
    }
}

protected void Dropdown_SelectedIndexChanged(object sender, EventArgs e)
{
    if(drpDownList.SelectedIndex > 0)
    {
        string strValue = drpDownList.Value;

        CheckBoxList chkBoxList = new CheckBoxList();

        //Query database for information based on dropdownlist value
        chkBoxList.Items.Add(new ListItem() { Text = strValue, Value = "" /* what was queried */ });
    }
}

protected void Button_Click(object sender, EventArgs e)
{
    foreach (Control ctlControl in pnlPanel.Controls)
    {
        if (ctlControl is CheckBoxList)
        {
            CheckBoxList chkBoxList = (CheckBoxList)ctlControl;

            foreach (ListItem lisItem in chkBoxList.Items)
            {
                if (lisItem.Selected == true)
                {
                    //Do whatever
                }
            }
        }
    }
}

问题出在选择下拉列表索引后,页面会生成一个复选框用于用户交互。完成操作并单击按钮以检查复选框列表的属性后,该操作将失败,因为该复选框列表依赖于SelectedIndexChanged方法,这意味着将擦除用户所做的任何决定,并且代码将不会执行。

2 个答案:

答案 0 :(得分:0)

  • 您有一个服务器端DropDownList来生成CheckBoxList
  • 您有一个服务器按钮来收集所选项目

解决方案:

  • 您需要使用!IsPostBack条件来绑定dropdownlist
  • 不要使用SelectedIndexChanged事件,因为您已经有一个按钮来收集选定的项目
  • 在按钮单击事件上申请循环以获取所选项目

尝试一下:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
    {
        //Bind your drop downlist here
    }
}



protected void button1_Click(object sender, EventArgs e)
{
    for(int x=0;x<ddl1.Items.Count;x++)
    {
        if(ddl1.Items[x].Selected)
        {
            //do something
        }
    }
}

答案 1 :(得分:0)

我终于想出了解决问题的方法,尽管我不得不求助于javascript。我只是给了生成的列表一个静态ID以供参考,所以我做了一个javascript函数来遍历生成的复选框。然后,我构建了一个具有复选框值的字符串,然后将其传递给一个隐藏的控件,并在单击隐藏代码的按钮中进行引用。

该函数引用了下一页上的第一个解决方案: https://forums.asp.net/t/1335376.aspx?Loop+through+checkboxlist+with+Javascript

功能如下:

        function ReadCheckboxes() {
            var varList = document.getElementById('CONTROLID').getElementsByTagName("input");

            if (eval(varList)) {
                var varCollatString = '';

                for (var i = 0; i < varList.length; i++) {
                    if (varList[i].checked == true) {
                        var varID = varList[i].value + ',';
                        varCollatString += varID;                        
                    }
                }

                var varHidden = document.getElementById('HIDDENCONTROL');
                varHidden.value = varCollatString;
            }
        }