关于asp.net页面生命周期的问题,重新描述了一下,希望能说清楚

ahking 2016-03-27 03:46:00
页面上有三个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,请问是怎么回事?
...全文
202 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 版主 2016-03-28
  • 打赏
  • 举报
回复
不是太明白,这种debug就应该能找到问题所在
qbilbo 2016-03-28
  • 打赏
  • 举报
回复
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发生变化。
jingshaohui 2016-03-28
  • 打赏
  • 举报
回复
1.确定GroupName是不是都一样; 2.每次AutoPostBack都会执行Page_Load中的代码,要确定其中除了IsPoatBack中的代码外没有其他代码,另外每个RadioButton都要有AutoPostBack=true 3.建议你把r1.Enabled=false去掉试试(这个不确定,需要你试试)
Justin-Liu 2016-03-28
  • 打赏
  • 举报
回复
debug一下
qbilbo 2016-03-28
  • 打赏
  • 举报
回复
声明方式设置的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,造成的后果你自己试...
ahking 2016-03-28
  • 打赏
  • 举报
回复
引用 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"; 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后生效了

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧