页面上有三个radioButton控件,r1、r2和r3;还有一个文本框控件t1
在设计视图下设置r1的checked属性为true ; <asp:RadioButton ID="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中写如下代码
void r1_CheckedChanged(......)
{
if(r1.checked)
t1.text="1";
if(r2.checked)
t1.text="2";
if(r3.checked)
t1.text="3"; }运行后,在页面中点击radiobutton r3,t1的值应该是3,但结果却是1,请问是怎么回事?
在设计视图下设置r1的checked属性为true ; <asp:RadioButton ID="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中写如下代码
void r1_CheckedChanged(......)
{
if(r1.checked)
t1.text="1";
if(r2.checked)
t1.text="2";
if(r3.checked)
t1.text="3"; }运行后,在页面中点击radiobutton r3,t1的值应该是3,但结果却是1,请问是怎么回事?
2.每次AutoPostBack都会执行Page_Load中的代码,要确定其中除了IsPoatBack中的代码外没有其他代码,另外每个RadioButton都要有AutoPostBack=true
3.建议你把r1.Enabled=false去掉试试(这个不确定,需要你试试)
t1.text="1";
if(r2.checked)
t1.text="2";
if(r3.checked)
t1.text="3";
按这样写t1.Test是"3"。
if(r1.checked)
t1.text="1";
else if(r2.checked)
t1.text="2";
else if(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后生效了
if(!isPostBack)
{
bool b = r1.checked;
r2.checked=true;
r1.Enabled = false;
}
单步调试,看一下b的值你就知道了。
WebForm毕竟不是WinForm,在代码中改变checked属性时,并不会马上把这组radio的状态更新,而是在render时一并处理的。所以也无所谓enabled= false在前还是在后。
其实可以来个更极端的测试:
if(!isPostBack)
{
bool b = r1.checked;
r2.checked=true;
r3.checked = true;
bool b1 = r1.checked;
bool b2 = r2.checked;
bool b3 = r3.checked;
r1.Enabled = false;
}
这时你可以看到大家都是true,造成的后果你自己试...