代码之家  ›  专栏  ›  技术社区  ›  Kenzo_Gilead

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

  •  1
  • Kenzo_Gilead  · 技术社区  · 6 年前

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

    据我所知。。。

    <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>
    

    使用netframework4.6.2。

    2 回复  |  直到 6 年前
        1
  •  1
  •   Jitendra G2    6 年前

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

    已检查 用于在页面加载时初始化选中的属性。如果不需要,可以删除。

    <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;
    }
    
        2
  •  0
  •   Kenzo_Gilead    6 年前

    我正在处理与单选按钮上OnCheckedChanges事件相关的另一个问题。。。 但最初的问题是固定的。

    Forum Solution

    我发布的解决方案,为我工作,作为基地作为一个帮助来自一个论坛,希望它能帮助其他人以及这个错误。

    中继器 .

    <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>
    

    JS公司

    <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>
    

    后端

    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;
        }
    }