//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"]
...
}
红色部分去掉,然后加一个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
后台不需要
System.Web.UI.HtmlControls.HtmlInputCheckBox ck = (System.Web.UI.HtmlControls.HtmlInputCheckBox)Repeater1.Items[i].FindControl("Check");
直接findcontrol
#6
为什么不管构没勾选,我循环获取的所有值都是"on",这样无法判断是否勾选了
#7
加了加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");
应该加上加runat="server"
然后后台 获取
checkbox box= Repeater1.findcontrol("Checkbox") as checkbox;这样就得到了值了
因为循环了 所以应该获得得是多个值才对 恩
所以应该是Repeater1.Items[i].FindControl("Checkbox");
#10
加上=server js都失效了?没理由啊,js是可以做到获取服务端控件的啊
#11
用了模板页?
#12
checkbox.checked=true 被选中。
#13
不行,一旦加上立即失效,难道没有两者兼顾完美解决的办法吗哎
#14
这样吧 你等等 我把我获取服务器端的js代码copy给你吧
#15
用的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
运行后报错 编译器错误消息: CS0103: 当前上下文中不存在名称“chkAll”
#20
楼主啊 OK了没啊?
#21
那肯定是不存在 你没runat=server
#22
LZ 你亮了。
#23
把chkAll 加上runat="server"
#24
不该这样吧,我加上去了还是一直不存在
#25
哦 那我再想想别的办法 有个框架真麻烦啊
#26
你这个脚本是放在哪个页面?父框架页?
#27
本页啊
#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 %>")试试
<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
#32
<asp:CheckBox ID="chkAll" runat="server" onclick="CheckAll(this);" />
function CheckAll(sender) {
$(":input[type='checkbox']").attr("checked", sender.checked);
}
还是不行,我无能为力
#33
可以了,全选反选有效了,谢谢
#34
凑个热闹 挺简单的问题整的那么复杂
#35
你对C# 服务器控件与HTML控件区别不熟悉,不然你不会为这个问题纠结半天!
#36
加if(!IsPostBack){}
#37
36楼亮了。。
#38
复杂问题简单化,楼主估计没有使用“查看源代码”检查过页面解析之后的源码。如果使用过,你就会知道,放入Repeater等里面的受后台管理的空间的ID全部会被重命名,因为ASP页面要保证每一个控件的ID都是唯一的,添加一个Repeater的ID作为前缀。因此你的JS才会失效。解决方案有2.
第1:Jquery中使用类名获取控件的值,$(".title")等。将头模板中的命名一个类,将项模板中的命名为第二个类,以区分。
第二个:不改变现有东西,添加一个隐藏文本框,所有复选框单击之后,获得全部复选框选中的值,用逗号隔开,将值保存到隐藏文本框中。后台的处理对隐藏文本框的值进行处理就行了。
第1:Jquery中使用类名获取控件的值,$(".title")等。将头模板中的命名一个类,将项模板中的命名为第二个类,以区分。
第二个:不改变现有东西,添加一个隐藏文本框,所有复选框单击之后,获得全部复选框选中的值,用逗号隔开,将值保存到隐藏文本框中。后台的处理对隐藏文本框的值进行处理就行了。
#39
说了那么多
load if(!IsPostBack){}
事件把你的checked恢复初始状态了
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"]
...
}
红色部分去掉,然后加一个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
后台不需要
System.Web.UI.HtmlControls.HtmlInputCheckBox ck = (System.Web.UI.HtmlControls.HtmlInputCheckBox)Repeater1.Items[i].FindControl("Check");
直接findcontrol
#6
为什么不管构没勾选,我循环获取的所有值都是"on",这样无法判断是否勾选了
#7
加了加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");
应该加上加runat="server"
然后后台 获取
checkbox box= Repeater1.findcontrol("Checkbox") as checkbox;这样就得到了值了
因为循环了 所以应该获得得是多个值才对 恩
所以应该是Repeater1.Items[i].FindControl("Checkbox");
#10
加上=server js都失效了?没理由啊,js是可以做到获取服务端控件的啊
#11
用了模板页?
#12
checkbox.checked=true 被选中。
#13
不行,一旦加上立即失效,难道没有两者兼顾完美解决的办法吗哎
#14
这样吧 你等等 我把我获取服务器端的js代码copy给你吧
#15
用的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
运行后报错 编译器错误消息: CS0103: 当前上下文中不存在名称“chkAll”
#20
楼主啊 OK了没啊?
#21
那肯定是不存在 你没runat=server
#22
LZ 你亮了。
#23
把chkAll 加上runat="server"
#24
不该这样吧,我加上去了还是一直不存在
#25
哦 那我再想想别的办法 有个框架真麻烦啊
#26
你这个脚本是放在哪个页面?父框架页?
#27
本页啊
#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 %>")试试
<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
#32
<asp:CheckBox ID="chkAll" runat="server" onclick="CheckAll(this);" />
function CheckAll(sender) {
$(":input[type='checkbox']").attr("checked", sender.checked);
}
还是不行,我无能为力
#33
可以了,全选反选有效了,谢谢
#34
凑个热闹 挺简单的问题整的那么复杂
#35
你对C# 服务器控件与HTML控件区别不熟悉,不然你不会为这个问题纠结半天!
#36
加if(!IsPostBack){}
#37
36楼亮了。。
#38
复杂问题简单化,楼主估计没有使用“查看源代码”检查过页面解析之后的源码。如果使用过,你就会知道,放入Repeater等里面的受后台管理的空间的ID全部会被重命名,因为ASP页面要保证每一个控件的ID都是唯一的,添加一个Repeater的ID作为前缀。因此你的JS才会失效。解决方案有2.
第1:Jquery中使用类名获取控件的值,$(".title")等。将头模板中的命名一个类,将项模板中的命名为第二个类,以区分。
第二个:不改变现有东西,添加一个隐藏文本框,所有复选框单击之后,获得全部复选框选中的值,用逗号隔开,将值保存到隐藏文本框中。后台的处理对隐藏文本框的值进行处理就行了。
第1:Jquery中使用类名获取控件的值,$(".title")等。将头模板中的命名一个类,将项模板中的命名为第二个类,以区分。
第二个:不改变现有东西,添加一个隐藏文本框,所有复选框单击之后,获得全部复选框选中的值,用逗号隔开,将值保存到隐藏文本框中。后台的处理对隐藏文本框的值进行处理就行了。
#39
说了那么多
load if(!IsPostBack){}
事件把你的checked恢复初始状态了
load if(!IsPostBack){}
事件把你的checked恢复初始状态了