问题描述
页面上有三个radioButton控件,r1、r2和r3;还有一个文本框控件t1在设计视图下设置r1的checked属性为true;<asp:RadioButtonID="r1"runat="server"AutoPostBack="True"GroupName="z"Checked="True"OnCheckedChanged="r1_CheckedChanged"/>
设置它们到一个组中;设置它们的autoPostBack=true;设置它们同一个checkchanged事件方法后台代码中:在page_load中写如下代码if(!isPostBack){r2.checked=true;r1.Enabled=false;}在checkchanged中写如下代码voidr1_CheckedChanged(......){if(r1.checked)t1.text="1";if(r2.checked)t1.text="2";if(r3.checked)t1.text="3";}运行后,在页面中点击radiobuttonr3,t1的值应该是3,但结果却是1,请问是怎么回事?
解决方案
本帖最后由 ahking 于 2016-03-27 15:46:56 编辑
解决方案二:
debug一下
解决方案三:
1.确定GroupName是不是都一样;2.每次AutoPostBack都会执行Page_Load中的代码,要确定其中除了IsPoatBack中的代码外没有其他代码,另外每个RadioButton都要有AutoPostBack=true3.建议你把r1.Enabled=false去掉试试(这个不确定,需要你试试)
解决方案四:
if(r1.checked)t1.text="1";if(r2.checked)t1.text="2";if(r3.checked)t1.text="3";按这样写t1.Test是"3"。if(r1.checked)t1.text="1";elseif(r2.checked)t1.text="2";elseif(r3.checked)t1.text="3";按这样写t1.Test才是"1"。因为r1.checked和r3.checked都是true.当r1.enabled=false时,改变r2,r3的checked并不会让r1的checked发生变化。
解决方案五:
不是太明白,这种debug就应该能找到问题所在
解决方案六:
引用3楼qbilbo的回复:
if(r1.checked)t1.text="1";if(r2.checked)t1.text="2";if(r3.checked)t1.text="3";按这样写t1.Test是"3"。if(r1.checked)t1.text="1";elseif(r2.checked)t1.text="2";elseif(r3.checked)t1.text="3";按这样写t1.Test才是"1"。因为r1.checked和r3.checked都是true.当r1.enabled=false时,改变r2,r3的checked并不会让r1的checked发生变化。
可是我是先让r2.checkded=true才让r1.enabled=false的,是不是说明声明方式设置的r1的checked属性在page_load后生效了
解决方案七:
声明方式设置的checked肯定在前,这个写个简单的测试代码就可确定:if(!isPostBack){boolb=r1.checked;r2.checked=true;r1.Enabled=false;}单步调试,看一下b的值你就知道了。WebForm毕竟不是WinForm,在代码中改变checked属性时,并不会马上把这组radio的状态更新,而是在render时一并处理的。所以也无所谓enabled=false在前还是在后。其实可以来个更极端的测试:if(!isPostBack){boolb=r1.checked;r2.checked=true;r3.checked=true;boolb1=r1.checked;boolb2=r2.checked;boolb3=r3.checked;r1.Enabled=false;}这时你可以看到大家都是true,造成的后果你自己试...