none
数据控件repeater所有的复选不可用了。 RRS feed

  • 问题

  • 控件repeater,中间加了一些列,内嵌了控件checkbox,在repeater的顶部有一个全选的checkbox,在客户端用js全选中列checkbox,之前一直都是正常的,点击顶部的,可以全选和撤销一列。但是,今天操作时,发现整个系统的全选功能都失效了,我右键查看源码,仔细检查发现,生成的控件id变了,

      else//列
                {

                    for (i = 0; i <= txtRows; i++) {
                        str_e = "rpt_list__ctl" + i + "_" + source;

                        if (e.checked) {
                            document.getElementById(str_e).checked = true;
                        }
                        else {
                            document.getElementById(str_e).checked = false;
                        }
                    }
                }

    这里是循环列,之前都是这样写的,测试没有任何问题,最近才发现问题,我发现生成的控件id变了: <input id="rpt_list_ctl01_gdgl_comp_flag" type="checkbox" name="rpt_list$ctl01$gdgl_comp_flag" />

    应该这样才对: <input id="rpt_list_ctl0_gdgl_comp_flag" type="checkbox" name="rpt_list$ctl0$gdgl_comp_flag" />

    不明白了,所有的页面都这样,怎么回事啊。

    2011年7月26日 2:56

全部回复

  • 控件repeater,中间加了一些列,内嵌了控件checkbox,在repeater的顶部有一个全选的checkbox,在客户端用js全选中列checkbox,之前一直都是正常的,点击顶部的,可以全选和撤销一列。但是,今天操作时,发现整个系统的全选功能都失效了,我右键查看源码,仔细检查发现,生成的控件id变了,

      else//列
                {

                    for (i = 0; i <= txtRows; i++) {
                        str_e = "rpt_list__ctl" + i + "_" + source;

                        if (e.checked) {
                            document.getElementById(str_e).checked = true;
                        }
                        else {
                            document.getElementById(str_e).checked = false;
                        }
                    }
                }

    这里是循环列,之前都是这样写的,测试没有任何问题,最近才发现问题,我发现生成的控件id变了: <input id="rpt_list_ctl01_gdgl_comp_flag" type="checkbox" name="rpt_list$ctl01$gdgl_comp_flag" />

    应该这样才对: <input id="rpt_list_ctl0_gdgl_comp_flag" type="checkbox" name="rpt_list$ctl0$gdgl_comp_flag" />

    不明白了,所有的页面都这样,怎么回事啊。


    不清楚具体情况。我建议你使用jQuery,尝试这样做(参考代码,具体自己可以根据实际情况修改)

    假设顶部的复选框是:AllCheck,这个Id是不变的,建议使用纯Html控件,默认checked=""。那么——

    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.2.min.js"></script>

    <script>
           
                 $(function(){

                        $("#AllCheck").click(function(){
     
                                    $(":checkbox").each(function(){
                                          
                                                 if($(this).index()>0)             //排除自身CheckBox
                                                 {
                                                        $(this).attr("checked", $("#AllCheck").attr("checked"));
                                                 }

                                          }):


                            }):

                   })

    </script>


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年7月26日 3:16
  • 晕死,我查看了另一套系统,在repeater中生成的第一行的控件id又是这样: <input id="rpt_list__ctl1_jkgl_comp_flag" type="checkbox" name="rpt_list:_ctl1:jkgl_comp_flag" />

     

    为什么现在不正常的又多了一个0啊,怎么控制的啊?彻底晕了:<input id="rpt_list_ctl01_gdgl_comp_flag" type="checkbox" name="rpt_list$ctl01$gdgl_comp_flag" />,我不要这个0出现,该如何?

    2011年7月26日 3:18
  • 檢查看看你的CheckBox的ClientIDMode是否為AutoID,預設應該是Inherit。

     


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/
    2011年7月26日 3:26
  • 晕死,我查看了另一套系统,在repeater中生成的第一行的控件id又是这样: <input id="rpt_list__ctl1_jkgl_comp_flag" type="checkbox" name="rpt_list:_ctl1:jkgl_comp_flag" />

     为什么现在不正常的又多了一个0啊,怎么控制的啊?彻底晕了:<input id="rpt_list_ctl01_gdgl_comp_flag" type="checkbox" name="rpt_list$ctl01$gdgl_comp_flag" />,我不要这个0出现,该如何?

    先尝试MVP的说法,如果依旧不行,请使用像我说的jQuery。

    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年7月26日 3:36
  • 查看看你的CheckBox的ClientIDMode是否為AutoID

    我用的vs2008,查看了checkbox的属性,都没这个啊。

    2011年7月26日 7:00
  • 一句话,无论用jquery,还是javascript,都要找到那个生成的客户端控件,对不对。现在的情况是客户端控件生成的控件有问题,用什么方法都是白搭啊。

    我再说一下,我的异常问题,可能有人没看明白。

    我把checkbox服务端控件,放入到一个repeater中,相当于他的子控件,他会生成对应的客户端控件。

    在网页上右键,可以查看到。<input id="rpt_list__ctl1_jkgl_comp_flag" type="checkbox" name="rpt_list:_ctl1:jkgl_comp_flag" />,

    而现在生成的,<input id="rpt_list__ctl01_jkgl_comp_flag" type="checkbox" name="rpt_list:_ctl01:jkgl_comp_flag" />多了一个0,导致找不到这个控件。我就不明白repeater生成子控件的原理,怎么会多出一个0来


    • 已编辑 fangyanqin 2011年7月26日 7:06 补充
    2011年7月26日 7:05
  • 一句话,无论用jquery,还是javascript,都要找到那个生成的客户端控件,对不对。现在的情况是客户端控件生成的控件有问题,用什么方法都是白搭啊。

    我再说一下,我的异常问题,可能有人没看明白。

    我把checkbox服务端控件,放入到一个repeater中,相当于他的子控件,他会生成对应的客户端控件。

    在网页上右键,可以查看到。<input id="rpt_list__ctl1_jkgl_comp_flag" type="checkbox" name="rpt_list:_ctl1:jkgl_comp_flag" />,

    而现在生成的,<input id="rpt_list__ctl01_jkgl_comp_flag" type="checkbox" name="rpt_list:_ctl01:jkgl_comp_flag" />多了一个0,导致找不到这个控件。我就不明白repeater生成子控件的原理,怎么会多出一个0来



    哦,我的意思是——你把全选(全不选)的按钮单独弄一个Html的纯代码。

    然后在<ItemTemplate>中存放服务端控件的CheckBox,然后使用我的代码,应该可以的。因为jQuery的选择器(:checkbox)只要类型是checkbox的都会进行行为操作——无论是那个checkbox,这样就不一定依赖具体的id了。

    关键——只要保证“全选/全部选“的按钮的id唯一。所以要你使用纯HTML的。底下每一个记录都可以用checkbox服务端控件,通过jQuery特殊的Selector来完成。


    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年7月26日 7:08
  • 看上去用jquery是解决问题了,但是,我这里是多列数据,列头都有一个全选的checkbox控件,按你这意思,那其他列也会被勾选,对吧,那就不好了。各个列应该互相不影响。
    2011年7月26日 8:50
  • 看上去用jquery是解决问题了,但是,我这里是多列数据,列头都有一个全选的checkbox控件,按你这意思,那其他列也会被勾选,对吧,那就不好了。各个列应该互相不影响。

    可以展示你的aspx代码吗?目前的,错误的代码。看看你的Checkbox怎么回事
    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年7月26日 9:10