Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.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# 如何在中继器元件中获得单选按钮排除?_C#_Asp.net_Radio Button_Radio Group - Fatal编程技术网

C# 如何在中继器元件中获得单选按钮排除?

C# 如何在中继器元件中获得单选按钮排除?,c#,asp.net,radio-button,radio-group,C#,Asp.net,Radio Button,Radio Group,我有一个中继器用于获取图像,底部有一个单选按钮。我想实现这个单选按钮(说中继器)与自动排他性特性的结合。我怎样才能做到呢 就我所知 <asp:Repeater runat="server" ID="repeater1"> <ItemTemplate> <div class="col-xs-12 col-sm-4 col-md-3"> <asp:Image ID="img" runat="server" Im

我有一个中继器用于获取图像,底部有一个单选按钮。我想实现这个单选按钮(说中继器)与自动排他性特性的结合。我怎样才能做到呢

就我所知

<asp:Repeater runat="server" ID="repeater1">
    <ItemTemplate>
        <div class="col-xs-12 col-sm-4 col-md-3">
            <asp:Image ID="img" runat="server" ImageUrl="<%#GetRutaImagen(Eval("id").ToString())%>" />

            <span>
                <asp:RadioButton runat="server" ID="rb1" Text='<%#Eval("description").ToString()%>' GroupName="nameGroup"/>
            </span> 

        </div>
     </ItemTemplate>                                                     
</asp:Repeater>

有了这段代码,我得到了每个图像一个单选按钮,但没有人自动搜索,即使我使用的是GroupName属性


使用NETFramework4.6.2.

我不知道是否有简单的方法来管理这种情况,但是您可以通过下面的代码来管理。最好将您的内容包装到更新面板中,这样您就可以防止更改复选框时的页面刷新

此外,被选中属性用于初始化页面加载时选中的属性。如果不需要,您可以删除

.ASPX

<asp:Repeater runat="server" ID="repeater1">
    <ItemTemplate>
        <div class="col-xs-12 col-sm-4 col-md-3">
            <span>
                <asp:RadioButton runat="server" ID="rb1" Checked='<%# Eval("IsChecked") %>' AutoPostBack="true" OnCheckedChanged="rb1_CheckedChanged" Text='<%#Eval("description").ToString()%>' />
            </span>
         </div>
    </ItemTemplate>
</asp:Repeater>

.CS

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        List<test1> lst = new List<test1>();
        lst.Add(new test1() { Id = 1, description = "R1", IsChecked = false });
        lst.Add(new test1() { Id = 3, description = "R2", IsChecked = true });
        lst.Add(new test1() { Id = 2, description = "R3", IsChecked = false });
        lst.Add(new test1() { Id = 4, description = "R4", IsChecked = false });

        repeater1.DataSource = lst;
        repeater1.DataBind();
    }
 }


protected void rb1_CheckedChanged(object sender, EventArgs e)
{
    foreach (RepeaterItem item in repeater1.Items)
    {
        (item.FindControl("rb1") as RadioButton).Checked = false;
    }
    (sender as RadioButton).Checked = true;
}
<script>
    function SetUniqueRadioButton(nameregex, current) {
        for (i = 0; i < document.forms[0].elements.length; i++) {

            elm = document.forms[0].elements[i]

            if (elm.type == 'radio') {

                elm.checked = false;
            }
        }
        current.checked = true;
    }
</script>
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostBack)
{
List lst=新列表();
添加(newtest1(){Id=1,description=“R1”,IsChecked=false});
添加(newtest1(){Id=3,description=“R2”,IsChecked=true});
添加(newtest1(){Id=2,description=“R3”,IsChecked=false});
添加(newtest1(){Id=4,description=“R4”,IsChecked=false});
repeater1.DataSource=lst;
repeater1.DataBind();
}
}
受保护的无效rb1_CheckedChanged(对象发送方,事件参数e)
{
foreach(repeater1.Items中的RepeaterItem项)
{
(item.FindControl(“rb1”)作为单选按钮)。选中=false;
}
(发送方为单选按钮)。选中=真;
}

在研究了SOF和一些论坛之后,我使用JS实现了一个非常正确的解决方案我正在处理另一个与RadioButton上OnCheckedChanged事件相关的问题… 但最初的问题是固定的

我发布了一个对我有用的解决方案,将其作为一个论坛的帮助,希望它能帮助其他人解决这个bug

中继器

<asp:Repeater runat="server" ID="repeater1" OnItemDataBound="repeater1_ItemDataBound">
    <ItemTemplate>
        <div class="col-xs-12 col-sm-4 col-md-3">
            <asp:Image ID="img" runat="server" ImageUrl="<%#GetRutaImagen(Eval("id").ToString())%>" />

            <span>
                <asp:RadioButton runat="server" ID="rb1" Text='<%#Eval("description").ToString()%>' GroupName="nameGroup" OnCheckedChanged="rb1_CheckedChanged"/>
            </span> 

        </div>
     </ItemTemplate>                                                     
</asp:Repeater>

我认为你应该为你的模型创建一个GroupName属性,并用EVALThanks@SiavashGhanbari将它绑定到RadioButton,但它不起作用。你的意思是,所有的单选按钮都可以检查。GroupName不适用,对吗?@JitendraRangpariya确实……好的。以前,我尝试过这个方法,但没有找到任何合适的解决方案,所以我使用了另一种方法来管理它,比如我在单选按钮单击时调用autopostback事件,并通过code
foreach(rpTravellerProfiles.Items中的RepeaterItem项){(item.FindControl(“RdoSetMasterRecord”)作为单选按钮取消选中所有单选按钮).Checked=false;}
非常感谢您的帮助@JitendraRangpariya。我会认为这是应得的。我正在研究和检查基于jquery和JS思想的解决方案。就我所知,我会把它贴出来帮助别人。您的解决方案正在工作,但它可以从后端管理情况。。。。在任何情况下,它的工作,因为我希望它。。。谢谢,伙计(如果你认为这个问题值得,你介意给它打分吗?再次感谢)
protected void repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    try
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            RadioButton rbLogoSeleccionado = (RadioButton)e.Item.FindControl("rb1");
            string script = "SetUniqueRadioButton('repeater1.*nameGroup',this)";

            rbLogoSeleccionado.Attributes.Add("onclick", script);
        }
    }

    catch (Exception ex)
    {
        PIPEvo.Log.Log.RegistrarError(ex);
        throw;
    }
}