none
RadioButtonList中的默认项竟然不触发OnSelectedIndexChanged ? RRS feed

  • 问题

  • RadioButtonList的数据从后台来绑定,绑定后,给个默认选中的值。前台写法:<asp:RadioButtonList ID="radlMy" runat="server" RepeatColumns="4"
    RepeatDirection="Horizontal"
    RepeatLayout="Flow"
    OnSelectedIndexChanged="radlMy_SelectedIndexChanged"
    AutoPostBack="true">
    </asp:RadioButtonList>,比如,有3个选项,“按天统计”,“按月统计”,“按年统计”,按天统计时默认选中,只要项一变化,就执行OnSelectedIndexChanged查询数据。

    好,现在页面载入完成,我首先点击,“按月查询”--正常查询。

    我再点击:“按年统计”--正常查询数据

    最后,点击:“按天统计”,--无反应了。。。我断点测试,都不进去。只要是选择“按天统计”就不执行查询。不知道什么情况,该设置我都设置了

    2010年12月17日 8:01

答案

  • OnSelectedIndexChanged 是指的改变后才触发事件

    如果当前选中的是   “按天统计”  如果你再点 “按天统计” ,则不会触发该事件

    2010年12月17日 8:30
  • 在 EnableViewState="false"的情况下,确实是你说的那样的。改成EnableViewState="true"即可

    <%@ Page Language="C#" EnableViewState="true" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
     protected void radlMy_SelectedIndexChanged(object sender, EventArgs e)
     {
      Response.Write(radlMy.SelectedItem.Text);
     }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
     <title></title>
    </head>
    <body>
     <form id="form1" runat="server">
     <asp:RadioButtonList ID="radlMy" runat="server" RepeatColumns="4" RepeatDirection="Horizontal"
      RepeatLayout="Flow" AutoPostBack="true" OnSelectedIndexChanged="radlMy_SelectedIndexChanged">
      <asp:ListItem Selected="True">按天</asp:ListItem>
      <asp:ListItem>按周</asp:ListItem>
      <asp:ListItem>按月</asp:ListItem>
     </asp:RadioButtonList>
     </form>
    </body>
    </html>
    
    

    【孟子E章】
    2010年12月18日 13:32
    版主

全部回复

  • 不能设置缺省的项吗? 是不是和这个缺省项有关?

    我断点调试,其他两个项选中都会进去事件,唯独,选中为“按天统计”,就不进来了,更为离谱的是,选中这个这个“按天统计”后,在pageload处设置为断点,也不进来。其他项都可以进来。
    2010年12月17日 8:08
  • OnSelectedIndexChanged 是指的改变后才触发事件

    如果当前选中的是   “按天统计”  如果你再点 “按天统计” ,则不会触发该事件

    2010年12月17日 8:30
  • “按天统计”载入时是选中的,可是你看我的操作顺序,都选择了好几项之后,最后才点击“按天统计”,怎么不改变?那我要怎么做?

    我查看了源码,发现“按天统计”是默认选中,就没有:onclick事件。怎么回事,

    2010年12月17日 9:03
  • 那你试试先不默认选择任何项selectdindex=-1试试?
    2010年12月18日 9:48
  • 在 EnableViewState="false"的情况下,确实是你说的那样的。改成EnableViewState="true"即可

    <%@ Page Language="C#" EnableViewState="true" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
     protected void radlMy_SelectedIndexChanged(object sender, EventArgs e)
     {
      Response.Write(radlMy.SelectedItem.Text);
     }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
     <title></title>
    </head>
    <body>
     <form id="form1" runat="server">
     <asp:RadioButtonList ID="radlMy" runat="server" RepeatColumns="4" RepeatDirection="Horizontal"
      RepeatLayout="Flow" AutoPostBack="true" OnSelectedIndexChanged="radlMy_SelectedIndexChanged">
      <asp:ListItem Selected="True">按天</asp:ListItem>
      <asp:ListItem>按周</asp:ListItem>
      <asp:ListItem>按月</asp:ListItem>
     </asp:RadioButtonList>
     </form>
    </body>
    </html>
    
    

    【孟子E章】
    2010年12月18日 13:32
    版主
  • 要不把你的从page_load中的如何绑定的代码贴出来看看,我觉得可能是你的PAGE_LOAD中绑定的代码没有加入if(!ispostback)
    2010年12月20日 5:05
  • 从该问题,我得出结论就是,看问题还是要从整体出发,任何一个事物都不是孤立存在的。正如这个RadioButtonList控件,为什么默认选中的始终不能触发查询事件,各项属性值也都设置了。原因很简单,因为与updatepanel控件搭配使用,单击事件后,局部刷新了GridView数据区域,确没有刷新RadioButtonList控件自身,导致,第一个选中项始终处于选中状态,所以不能触发单击事件了。

    问题到此结束,同时感谢各位给予积极的回答!

    2010年12月23日 2:10
  • 遇到同样问题,楼主看问题很全面啊,解决了^ ^
    2011年12月5日 8:27