如何获取repeater中input checkbox的值并不影响反选/全选功能

时间:2021-09-09 10:03:53
前台:

//JS
<script type="text/javascript">
        $(document).ready(function () {
            $("#chkAll").click(function () {
                $("input[name='Check']").each(function () {
                    this.checked = $("#chkAll").attr("checked");
                });
            });
        });   
    </script>


<asp:Repeater ID="Repeater1" runat="server">
                <HeaderTemplate>
                    <table width="100%" border="0" cellspacing="0" cellpadding="0">
                        <tr style="background-color: #EEE">
                            <td class="tr1">
                                <input id="chkAll" name="chkAll" type="checkbox" />
                            </td>
                            <td class="tr2">
                                名字
                            </td>
                            <td class="tr1">
                                性别
                            </td>
                            <td class="tr3">
                                公司
                            </td>
                            <td class="tr3">
                                联系电话
                            </td>
                            <td class="tr3">
                                移动电话
                            </td>
                            <td class="tr3">
                                电子邮箱
                            </td>
                        </tr>
                    </table>
                </HeaderTemplate>
                <ItemTemplate>
                    <table width="100%" border="0" cellspacing="0" cellpadding="0">
                        <tr>
                            <td class="tr1">
                                <dx:ASPxLabel ID="id" runat="server" Text='<%#Eval("id") %>' Visible="false">
                                </dx:ASPxLabel>
                                <input id="Checkbox" name="Check" type="checkbox" runat="server" />
                            </td>
                            <td class="tr2">
                            <a href="mail_contactShow.aspx?id=<%#Eval("id") %>"> <%#Eval("name") %></a>
                               
                            </td>
                            <td class="tr1">
                               <a href="mail_contactShow.aspx?id=<%#Eval("id") %>">  <%#Eval("sex") %></a>
                            </td>
                            <td class="tr3">
                               <a href="mail_contactShow.aspx?id=<%#Eval("id") %>">  <%#Eval("Company") %></a>
                            </td>
                            <td class="tr3">
                               <a href="mail_contactShow.aspx?id=<%#Eval("id") %>">  <%#Eval("ConnectTelNo")%></a>
                            </td>
                            <td class="tr3">
                               <a href="mail_contactShow.aspx?id=<%#Eval("id") %>">  <%#Eval("ConnectMobileTelNo")%></a>
                            </td>
                            <td class="tr3">
                               <a href="mail_contactShow.aspx?id=<%#Eval("id") %>">  <%#Eval("Mail") %></a>
                            </td>
                        </tr>
                    </table>
                </ItemTemplate>
            </asp:Repeater>


后台:

protected void delete_Click(object sender, EventArgs e)
        {
            MyService.MyServiceClient client = new MyService.MyServiceClient();
            for (int i = 0; i < Repeater1.Items.Count; i++)
            {
                System.Web.UI.HtmlControls.HtmlInputCheckBox ck = (System.Web.UI.HtmlControls.HtmlInputCheckBox)Repeater1.Items[i].FindControl("Check");
                if (ck.Checked)
                {
                    ASPxLabel lb = (ASPxLabel)Repeater1.Items[i].FindControl("id");
                    client.AddressBookDelete(Convert.ToInt32(lb.Text));
                }
            }
        }

看了很多方法,都说加上runat="server"转为服务端控件,但是转了后JS的全选代码就失效了,而且我用上面的后台代码获取了checkbox后,checked值始终都是false
由于以前没用过repeater,所以对很多问题不是很懂,求高手指点

39 个解决方案

#1


设一个隐藏的TextBox 或者 隐藏域存值不可以么

#2


可以不用加 runat="server"  Request.from["那个input的name"]

#3


获取 Request.from["那个input的name"]

#4


 <input id="Checkbox" name="Check"  type="checkbox"  runat="server" />
红色部分去掉,然后加一个value="<%# Eval("id")%>",后台读取
if(Request.Form["Check"]!=null)
{
string idlist=Request.Form["Check"]
...
}

#5


加runat="server"

后台不需要
 System.Web.UI.HtmlControls.HtmlInputCheckBox ck = (System.Web.UI.HtmlControls.HtmlInputCheckBox)Repeater1.Items[i].FindControl("Check");

直接findcontrol

#6


引用 3 楼 a7353101 的回复:
获取 Request.from["那个input的name"]

为什么不管构没勾选,我循环获取的所有值都是"on",这样无法判断是否勾选了

#7


引用 5 楼 wxr0323 的回复:
加runat="server"

后台不需要
 System.Web.UI.HtmlControls.HtmlInputCheckBox ck = (System.Web.UI.HtmlControls.HtmlInputCheckBox)Repeater1.Items[i].FindControl("Check");

直接findcontrol

加了加runat="server"后全选的js代码就失效了ORZ

#8


Request.from["那个input的name"]获取的值,我勾选了几个就是几个"on",根本无法用来判断删除啊!

#9


同意5楼得看法 
应该加上加runat="server"

然后后台 获取
checkbox  box=  Repeater1.findcontrol("Checkbox") as checkbox;这样就得到了值了
因为循环了 所以应该获得得是多个值才对 恩 
所以应该是Repeater1.Items[i].FindControl("Checkbox");

#10


加上=server js都失效了?没理由啊,js是可以做到获取服务端控件的啊 

#11


用了模板页?

#12


checkbox.checked=true 被选中。

#13


引用 10 楼 tongjingjingisfly 的回复:
加上=server js都失效了?没理由啊,js是可以做到获取服务端控件的啊

不行,一旦加上立即失效,难道没有两者兼顾完美解决的办法吗哎

#14


这样吧 你等等 我把我获取服务器端的js代码copy给你吧 

#15


引用 11 楼 codeingman 的回复:
用了模板页?

用的frame

#16


我说呢 原来是用了frame  汗啊。。。。。。。

#17


document.getElementById("<%=TextBox1.ClientID %>").Text试试

#18



<script type="text/javascript">
        $(function () {
            $("#<%=chkAll.ClientID %>").click(function () {
                $(":input[type='checkbox']").attr("checked", this.checked);
            });
        });  
</script>

#19


引用 18 楼 codeingman 的回复:
JScript code

<script type="text/javascript">
        $(function () {
            $("#<%=chkAll.ClientID %>").click(function () {
                $(":input[type='checkbox']").attr("checked", this.ch……

运行后报错 编译器错误消息: CS0103: 当前上下文中不存在名称“chkAll”

#20


楼主啊  OK了没啊?

#21


那肯定是不存在 你没runat=server 

#22


LZ 你亮了。

#23


把chkAll 加上runat="server"

#24


不该这样吧,我加上去了还是一直不存在

#25


哦 那我再想想别的办法 有个框架真麻烦啊 如何获取repeater中input checkbox的值并不影响反选/全选功能

#26


你这个脚本是放在哪个页面?父框架页?

#27


引用 26 楼 codeingman 的回复:
你这个脚本是放在哪个页面?父框架页?

本页啊

#28


document.getElementById("<%=TextBox1.ClientID %>")

<script type="text/javascript">
        $(function () {
            $("#<%=chkAll.ClientID %>").click(function () {
                $(":input[type='checkbox']").attr("checked", this.checked);
            });
        });  
</script>

不是("#<%=chkAll.ClientID %>")
而是("<%=chkAll.ClientID %>")试试

#29


加runat="server"了吗??

#30


还是不行哎,加了runat="server"

#31


如何获取repeater中input checkbox的值并不影响反选/全选功能

#32



<asp:CheckBox ID="chkAll" runat="server" onclick="CheckAll(this);" />


function CheckAll(sender) {
            $(":input[type='checkbox']").attr("checked", sender.checked);
}

还是不行,我无能为力

#33


引用 32 楼 codeingman 的回复:
HTML code

<asp:CheckBox ID="chkAll" runat="server" onclick="CheckAll(this);" />


JScript code

function CheckAll(sender) {
            $(":input[type='checkbox']").attr("checked", sender.checked……

可以了,全选反选有效了,谢谢

#34


凑个热闹 挺简单的问题整的那么复杂

#35


你对C# 服务器控件与HTML控件区别不熟悉,不然你不会为这个问题纠结半天!

#36


加if(!IsPostBack){}

#37


36楼亮了。。  

#38


复杂问题简单化,楼主估计没有使用“查看源代码”检查过页面解析之后的源码。如果使用过,你就会知道,放入Repeater等里面的受后台管理的空间的ID全部会被重命名,因为ASP页面要保证每一个控件的ID都是唯一的,添加一个Repeater的ID作为前缀。因此你的JS才会失效。解决方案有2. 
第1:Jquery中使用类名获取控件的值,$(".title")等。将头模板中的命名一个类,将项模板中的命名为第二个类,以区分。
第二个:不改变现有东西,添加一个隐藏文本框,所有复选框单击之后,获得全部复选框选中的值,用逗号隔开,将值保存到隐藏文本框中。后台的处理对隐藏文本框的值进行处理就行了。

#39


说了那么多   
load if(!IsPostBack){}


事件把你的checked恢复初始状态了

#1


设一个隐藏的TextBox 或者 隐藏域存值不可以么

#2


可以不用加 runat="server"  Request.from["那个input的name"]

#3


获取 Request.from["那个input的name"]

#4


 <input id="Checkbox" name="Check"  type="checkbox"  runat="server" />
红色部分去掉,然后加一个value="<%# Eval("id")%>",后台读取
if(Request.Form["Check"]!=null)
{
string idlist=Request.Form["Check"]
...
}

#5


加runat="server"

后台不需要
 System.Web.UI.HtmlControls.HtmlInputCheckBox ck = (System.Web.UI.HtmlControls.HtmlInputCheckBox)Repeater1.Items[i].FindControl("Check");

直接findcontrol

#6


引用 3 楼 a7353101 的回复:
获取 Request.from["那个input的name"]

为什么不管构没勾选,我循环获取的所有值都是"on",这样无法判断是否勾选了

#7


引用 5 楼 wxr0323 的回复:
加runat="server"

后台不需要
 System.Web.UI.HtmlControls.HtmlInputCheckBox ck = (System.Web.UI.HtmlControls.HtmlInputCheckBox)Repeater1.Items[i].FindControl("Check");

直接findcontrol

加了加runat="server"后全选的js代码就失效了ORZ

#8


Request.from["那个input的name"]获取的值,我勾选了几个就是几个"on",根本无法用来判断删除啊!

#9


同意5楼得看法 
应该加上加runat="server"

然后后台 获取
checkbox  box=  Repeater1.findcontrol("Checkbox") as checkbox;这样就得到了值了
因为循环了 所以应该获得得是多个值才对 恩 
所以应该是Repeater1.Items[i].FindControl("Checkbox");

#10


加上=server js都失效了?没理由啊,js是可以做到获取服务端控件的啊 

#11


用了模板页?

#12


checkbox.checked=true 被选中。

#13


引用 10 楼 tongjingjingisfly 的回复:
加上=server js都失效了?没理由啊,js是可以做到获取服务端控件的啊

不行,一旦加上立即失效,难道没有两者兼顾完美解决的办法吗哎

#14


这样吧 你等等 我把我获取服务器端的js代码copy给你吧 

#15


引用 11 楼 codeingman 的回复:
用了模板页?

用的frame

#16


我说呢 原来是用了frame  汗啊。。。。。。。

#17


document.getElementById("<%=TextBox1.ClientID %>").Text试试

#18



<script type="text/javascript">
        $(function () {
            $("#<%=chkAll.ClientID %>").click(function () {
                $(":input[type='checkbox']").attr("checked", this.checked);
            });
        });  
</script>

#19


引用 18 楼 codeingman 的回复:
JScript code

<script type="text/javascript">
        $(function () {
            $("#<%=chkAll.ClientID %>").click(function () {
                $(":input[type='checkbox']").attr("checked", this.ch……

运行后报错 编译器错误消息: CS0103: 当前上下文中不存在名称“chkAll”

#20


楼主啊  OK了没啊?

#21


那肯定是不存在 你没runat=server 

#22


LZ 你亮了。

#23


把chkAll 加上runat="server"

#24


不该这样吧,我加上去了还是一直不存在

#25


哦 那我再想想别的办法 有个框架真麻烦啊 如何获取repeater中input checkbox的值并不影响反选/全选功能

#26


你这个脚本是放在哪个页面?父框架页?

#27


引用 26 楼 codeingman 的回复:
你这个脚本是放在哪个页面?父框架页?

本页啊

#28


document.getElementById("<%=TextBox1.ClientID %>")

<script type="text/javascript">
        $(function () {
            $("#<%=chkAll.ClientID %>").click(function () {
                $(":input[type='checkbox']").attr("checked", this.checked);
            });
        });  
</script>

不是("#<%=chkAll.ClientID %>")
而是("<%=chkAll.ClientID %>")试试

#29


加runat="server"了吗??

#30


还是不行哎,加了runat="server"

#31


如何获取repeater中input checkbox的值并不影响反选/全选功能

#32



<asp:CheckBox ID="chkAll" runat="server" onclick="CheckAll(this);" />


function CheckAll(sender) {
            $(":input[type='checkbox']").attr("checked", sender.checked);
}

还是不行,我无能为力

#33


引用 32 楼 codeingman 的回复:
HTML code

<asp:CheckBox ID="chkAll" runat="server" onclick="CheckAll(this);" />


JScript code

function CheckAll(sender) {
            $(":input[type='checkbox']").attr("checked", sender.checked……

可以了,全选反选有效了,谢谢

#34


凑个热闹 挺简单的问题整的那么复杂

#35


你对C# 服务器控件与HTML控件区别不熟悉,不然你不会为这个问题纠结半天!

#36


加if(!IsPostBack){}

#37


36楼亮了。。  

#38


复杂问题简单化,楼主估计没有使用“查看源代码”检查过页面解析之后的源码。如果使用过,你就会知道,放入Repeater等里面的受后台管理的空间的ID全部会被重命名,因为ASP页面要保证每一个控件的ID都是唯一的,添加一个Repeater的ID作为前缀。因此你的JS才会失效。解决方案有2. 
第1:Jquery中使用类名获取控件的值,$(".title")等。将头模板中的命名一个类,将项模板中的命名为第二个类,以区分。
第二个:不改变现有东西,添加一个隐藏文本框,所有复选框单击之后,获得全部复选框选中的值,用逗号隔开,将值保存到隐藏文本框中。后台的处理对隐藏文本框的值进行处理就行了。

#39


说了那么多   
load if(!IsPostBack){}


事件把你的checked恢复初始状态了