暮白兄、孟子等,希望能得到一点启发


暮白兄、孟子等高手进,希望能得到一点启发!
在做一个选举系统的时候,出现一个问题。用CheckBoxList绑定被选举人。选举名额是规定的。为了防止用户多选,我在CheckBoxList触发事件中做了如下处理。
private   void   CheckBoxList1_SelectedIndexChanged(object   sender,   System.EventArgs   e)
{
int   x,y,z=0;
y=0;
for(x=0;x <this.CheckBoxList1.Items.Count;x++)
{
if(this.CheckBoxList1.Items[x].Selected)
{
y=y+1;//得到用户一共选了几项
z=x;//将用户选项的索引赋给z
}
}
n=Convert.ToInt32(this.Label2.Text);//n是规定的选举名额
//Response.Write(n);
//下面判断用户选举的人数是否大于规定名额
if(y> n)
{
Response.Write( " <script   language= 'javascript '> alert( '您的选举人数超过指定范围! '); </script> ");
this.CheckBoxList1.Items[z].Selected=false;//问题出现的关键地方//如果用户选举人数大于规定的人数则提示用户,并且让用户超出规定的选项取消选择


return;

}
}
现在的问题是这样的——比如规定选举名额数为3人,即n取的指等于3,用户先选择三个选项,再选择这三个选项的后面的项(注意是后面的项),那么会提示用户“您的选举人数超过指定范围!”,点击此对话框“确定”以后,系统将选择的第四项取消选择(这样没有任何问题)。但,但,但,如果用户选择了三个选项,再选择这三个选项的前面的项(注意是前面的项),那么这时会提示“您的选举人数超过指定范围!”(到这里也没有问题),问题在这里,当这个对话框出来你点击“确定”以后,用户刚才多选的项并没有取消,而是将用户前面选择的三项中的最后一项取消了!奇怪!
不知道大家听懂了没有?如果听懂了,请指教一哈,应该是程序上的问题,如果没听懂,我再描述清楚点。


.net 程序开发 asp

Lin3W 10 years, 10 months ago


用 JS 记录选择的索引并顺序保存在数组中,

每次加选或减选都对数组做处理就可以了,

其实就是用数组来保持状态,好像不必在 Server 端大动干戈吧!

点解甘讲呢 answered 10 years, 10 months ago


为什么可以用客户端解决的问题还要用服务器端控件来做呢

十个好人 answered 10 years, 10 months ago


这种逻辑更应该用js 控制,服务器端只处理提交上来具体内容

athran answered 10 years, 10 months ago


你记录的是按items的显示顺序的最后选中的一个.

而不是你点选顺序的最后一个.

潘上将的爱斧 answered 10 years, 10 months ago


if(this.CheckBoxList1.Items[x].Selected)

{
y=y+1;//得到用户一共选了几项
z=x;//将用户选项的索引赋给z
}
}

//逻辑错误

thesan answered 10 years, 10 months ago

Your Answer