【问题标题】:How to get a radio button excluyent in a repeater element?如何在中继器元素中获得一个单选按钮?
【发布时间】:2019-03-13 00:52:56
【问题描述】:

我有一个中继器用于获取图像和底部的单选按钮。我想实现这个单选按钮(中继发言)与自动排除功能的结合。我怎样才能实现它?

据我所知......

<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 属性也没有一个 autoexcuyent

使用网络框架 4.6.2。

【问题讨论】:

  • 我认为你应该为你的模型创建一个 GroupName 的属性,并使用 EVAL 将它绑定到 RadioButton
  • 感谢@SiavashGhanbari,但它不起作用
  • 你的意思是说,所有的单选按钮都可以勾选。 GroupName 不适用吗?
  • @JitendraRangpariya 确实...
  • 好的。以前,我试过这个,但没有找到任何合适的解决方案,所以我使用了替代方法来管理这个,比如我在单选按钮单击时调用自动回发事件,并通过代码 foreach (RepeaterItem item in rpTravellerProfiles.Items) { (item.FindControl("rdoSetAsMasterRecord") as RadioButton).Checked = false; } 取消选中所有单选按钮

标签: c# asp.net radio-button radio-group


【解决方案1】:

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

此外,IsChecked 属性用于在页面加载时初始化检查。如果不需要,您可以删除。

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

【讨论】:

  • 非常感谢您为@JitendraRangpariya 所做的努力。我会评价它应得的。嗯,我正在研究,我正在检查基于 jquery 和 JS 想法的解决方案。据我所知,我会发布它以帮助他人。您的解决方案正在运行,但它可以从后端管理情况....无论如何,它可以按我的意愿工作...谢谢队友(如果您认为问题值得,您是否介意也给它评分?再次感谢)
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-18
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 2019-07-05
    • 2012-09-19
    相关资源
    最近更新 更多