Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# groupname在repeater asp.net中的多个单选按钮中不起作用_C#_Asp.net_Vb.net_Radio Button_Repeater - Fatal编程技术网

C# groupname在repeater asp.net中的多个单选按钮中不起作用

C# groupname在repeater asp.net中的多个单选按钮中不起作用,c#,asp.net,vb.net,radio-button,repeater,C#,Asp.net,Vb.net,Radio Button,Repeater,我有一个中继器,中继器内有一个radiobutton控件,在代码隐藏中,我填写radiobutton控件的groupname,因此,当我运行它时,我有一个包含许多行的表,其中一些行有radiobutton: <asp:updatepanel id="UpdatePanel1" runat="server" updatemode="Conditional"> <ContentTemplate> <asp:Repeater ID="Repea

我有一个中继器,中继器内有一个radiobutton控件,在代码隐藏中,我填写radiobutton控件的groupname,因此,当我运行它时,我有一个包含许多行的表,其中一些行有radiobutton:

  <asp:updatepanel id="UpdatePanel1" runat="server" updatemode="Conditional">
    <ContentTemplate>
        <asp:Repeater ID="Repeater1" runat="server" ViewStateMode="Enabled">
            <HeaderTemplate>
                <table class="table table-responsive table-bordered ">
                    <tr class="text-center" style="background-color: #6e6259; color: white;">
                        <th class="text-center">DESCRIPTION</th>
</HeaderTemplate>
            <ItemTemplate>
         <tr>
        <td style="padding-left: 20px;">
      <asp:RadioButton ID="rbtDinamic"  OnCheckedChanged="rbtDinamic_CheckedChanged" AutoPostBack="true"
           ViewStateMode="Enabled" Visible="false"  GroupName='<%#Eval("groupvalue") %>'   runat="server"/></td>
</ItemTemplate>
      <FooterTemplate>
    </table>
     </FooterTemplate>
    </asp:Repeater>
     </ContentTemplate>
      </asp:UpdatePanel>
但当我运行它时,中继器会用不同的名称创建组名:

Radiobutton row 1:
Repeater1$ctl05$1

Radiobutton row 2:

Repeater1$ctl06$1
因此,它允许选中所有单选按钮,而不是在选中同一组的另一个单选按钮时取消选中

我在论坛中找到此代码,但只有当我只有一个groupname时,它才有效,但我可以有多个groupname:

  Private Sub Repeater1_ItemDataBound(sender As Object, e As RepeaterItemEventArgs) Handles Repeater1.ItemDataBound
    Try
        If e.Item.ItemType = ListItemType.AlternatingItem Or e.Item.ItemType = ListItemType.Item Then
            If CType(e.Item.FindControl("hdf1"), Label).Text = False Then
                CType(e.Item.FindControl("rbtDinamic"), RadioButton).Visible = True
                CType(e.Item.FindControl("rbtDinamic"), RadioButton).GroupName = CType(e.Item.FindControl("groupvalue"), Label).Text = False
            End If
        End If
    Catch ex As Exception          
    End Try
End Sub
  Protected Sub rbtDinamic_CheckedChanged(sender As Object, e As EventArgs)
    For Each item As RepeaterItem In Repeater1.Items
        Dim rbtn As RadioButton = DirectCast(item.FindControl("rbtDinamic"), RadioButton)
        rbtn.Checked = False
    Next
    DirectCast(sender, RadioButton).Checked = True
End Sub
但是可以有多组单选按钮,所以在这种情况下,我不能使用此代码


有什么地方可以这样做吗?谢谢

这是一个已知的错误,与ItemTemplate或AlternatingItemTemplate中的RadioButton控件使用有关。这是由于中继器损坏了控件ID和组名的命名,而这些名称是使用DynamicClientMode在后台自动分配的。要解决此问题,请设置如下客户端函数:

function setExclusiveRadioButton(name, current)
{
    regex = new RegExp(name);  

    for (i = 0; i < document.forms[0].elements.length; i++)
    {
        var elem = document.forms[0].elements[i];
        if (elem.type == 'radio')
        {
           elem.checked = false;
        }
    }
    current.checked = true;
}
注意:setExclusiveRadioButton方法的第一个参数应设置为此正则表达式约定:[中继器控件ID].[RadioButton\u GroupName]RadioButton\u GroupName值可使用Eval检索。或者,您可以使用基本HTML输入类型=radio或使用RadioButtonList

参考:

类似问题:


由于其他用户提供了问题的根本原因,所以我不会对此进行解释,但我会为您提供基于Jquery的解决方案:

jQuery("[name$='$optValue']").attr("name",jQuery("[name$='$optValue']").attr("name"));

jQuery("[name$='$optValue]").click(function (){ 
                //set name for all to name of clicked 
                jQuery("[name$='$optValue]").attr("name", this.attr("name")); 
            });
使用attrname,jQuery[name$='optValue']将尝试选择页面上以optValue结尾的所有输入,即中继器中的optValue项。之后,它将name属性更改为为为所有optValue元素找到的第一个值。此处使用的“get”格式的attrname函数始终返回列表中的第一个。因此,所有选项按钮在Html中都具有相同的“name”属性,这允许选择正确工作


在客户端,将收音机的名称设置为您喜欢的任何组,但将生成的名称写在数据属性中,这是一个很好的解决方法

然后,在表单提交之前,将data-attribute复制回name属性,这样ASP.NET就可以识别服务器上的控件

此脚本将执行以下操作:

<script type="text/javascript">
    $(document).ready(function (e) {            
        $("input[type='radio']").each(function (idx, elm) {
            var generatedName = $(elm).attr("name");
            $(elm).data("name", generatedName);
            $(elm).attr("name", "whatever-group-name");
        });

    });

    function onSubmit() {
        $("input[type='radio']").each(function (idx, elm) {
            var generatedName = $(elm).data("name");
            $(elm).attr("name", generatedName);
        });
    }
</script>

谢谢你的回答,我有一个QEUSE选项,idx和elm的值是多少?它们分别包含数组中元素的索引和元素本身。jQuery将为您提供它们;不需要您做任何事情来初始化它们。只需在传递给.each方法的函数体中使用它们。
<script type="text/javascript">
    $(document).ready(function (e) {            
        $("input[type='radio']").each(function (idx, elm) {
            var generatedName = $(elm).attr("name");
            $(elm).data("name", generatedName);
            $(elm).attr("name", "whatever-group-name");
        });

    });

    function onSubmit() {
        $("input[type='radio']").each(function (idx, elm) {
            var generatedName = $(elm).data("name");
            $(elm).attr("name", generatedName);
        });
    }
</script>
if (!IsPostBack)
{
    Page.ClientScript.RegisterOnSubmitStatement(Page.GetType(), "prepareSubmit", "onSubmit();");
}