您的位置:首页 > 其它

Repeater,datalist 内RadioButton GroupName失效 ,无法单选

2015-06-28 20:02 323 查看
为了让多个RadioButton可以单选,我们通常会加入

GroupName=“xxx"来分组,但如果RadioButton放置在Repeater,datalist里面,设置就会无效,原因是ASP.NET会把Repeater,datalist解释成html页面时候,会把RadioButton解释为<input type=radio>,而且每行的id,

GroupName都不同了,所以 GroupName失效了。

解决办法,直接改用<input type=radio>,但这样后台取值只能用Post方式了,能不能用服务器控件?

考虑使用RadioButtonList,这个解释成html页面,GroupName是相同的。

如果还是想要只用RadioButton,可以这样写

前台(参考用,里面的label标签是我把RadioButton包装成按钮用的,关键是下面的JS 代码)

<asp:Repeater ID="Repeater1" runat="server"  >
<ItemTemplate>
<label class="am-btn am-btn-primary  am-btn-sm">
<asp:RadioButton GroupName="cbtn" ID="ttonr1" runat="server" Text='<%# Eval("name") %>' value='<%# Eval("name") %>' />(name是数据库字段)
</label>
</ItemTemplate>
</asp:Repeater>
<asp:HiddenField ID="HiddenField1" runat="server" />这一行非必需

前台的JS,放置页面里,作用是点击RadioButton 时候,其他RadioButton 都被取消了

<script src="assets/js/jquery.min.js"></script> 需要在assets/js/文件夹有jquery.min.js,网上很多网页模板就有这个文件

<script type="text/javascript">

$(':input:radio').on('change', function () {
if ($(this).is(':checked')) {
$(this).is(':checked');
$(this).parents().siblings().children().removeAttr("checked");
// console.log('单选框当前选中的是:', $(':input:radio').filter(':checked').val());这行测试用
// document.getElementById("HiddenField1").value = $(this).val();这行非必需,配合网页上面那行非必需,直接赋值,后台就不用循环取Repeater,datalist 内RadioButton的值了
}
});
</script>

后台取值

for (int y = 0; y <  Repeater1.Items.Count; y = y + 1)
{
System.Web.UI.WebControls.CheckBox seInfo = Repeater1.Items[y].FindControl("ttonr1") as System.Web.UI.WebControls.CheckBox;
if (seInfo.Checked == true) { 选择的radio文字 = seInfo.Text;  }
}
如果在上面直接赋值给隐藏控件,用 string p = HiddenField1.Value.Trim();这样就不需要上面的后台循环代码了


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: