页面上有三个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,请问是怎么回事?

解决方案 »

  1.   

    debug一下
      

  2.   

    1.确定GroupName是不是都一样;
    2.每次AutoPostBack都会执行Page_Load中的代码,要确定其中除了IsPoatBack中的代码外没有其他代码,另外每个RadioButton都要有AutoPostBack=true
    3.建议你把r1.Enabled=false去掉试试(这个不确定,需要你试试)
      

  3.   

     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";
     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发生变化。
      

  4.   

    不是太明白,这种debug就应该能找到问题所在
      

  5.   


    可是我是先让r2.checkded=true才让r1.enabled = false的 ,是不是说明声明方式设置的r1的checked属性在page_load后生效了
      

  6.   

    声明方式设置的checked肯定在前,这个写个简单的测试代码就可确定:
    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,造成的后果你自己试...