您好第一次在这里发帖,对不起,如果我有点含糊。
所以我正在构建一个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方法,这意味着将擦除用户所做的任何决定,并且代码将不会执行。
答案 0 :(得分:0)
解决方案:
!IsPostBack
条件来绑定dropdownlist 尝试一下:
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;
}
}