ASP.NET 2.0中继器中的单选按钮分组不正确

ASP.NET 2.0中继器中的单选按钮分组不正确,asp.net,radio-button,asp.net-2.0,repeater,Asp.net,Radio Button,Asp.net 2.0,Repeater,我在ASP.NET2.0中有一个web应用程序,其中我需要一个高度定制的网格。网格中的一列包含每行的单选按钮 我将它实现为一个中继器控件,在每个ItemTemplate中都有一个div。问题是单选按钮(ASP:RadioButtontags)没有按应有的方式分组;选择其中一个不会取消选择其余的。我已经在它们上设置了GroupName属性,但是我看不到通过Firebug在HTML中的任何地方呈现。在问题上显示“name”属性的谷歌搜索?您是否需要这些单选按钮作为服务器控件(即,您是否需要runat

我在ASP.NET2.0中有一个web应用程序,其中我需要一个高度定制的网格。网格中的一列包含每行的单选按钮


我将它实现为一个
中继器
控件,在每个
ItemTemplate
中都有一个
div
。问题是单选按钮(
ASP:RadioButton
tags)没有按应有的方式分组;选择其中一个不会取消选择其余的。我已经在它们上设置了
GroupName
属性,但是我看不到通过Firebug在HTML中的任何地方呈现。在
问题上显示“name”属性的谷歌搜索?您是否需要这些单选按钮作为服务器控件(即,您是否需要runat=server标记)?如果没有,您只需在列上有常规的html单选按钮,并使用
语法将任何属性绑定到该列。只是一个想法

一位同事遇到了这个问题,并实现了一个jQuery解决方案。以下是它的摘录:

这给了我想要的单选按钮功能,但它阻止了我在回发时获得选中的单选按钮。所以我决定手动实现单选按钮功能

var radios = $("input:radio");
radios.click(function() {
     radios.removeAttr('checked');
     $(this).attr('checked', 'checked');
     return true;
});
这给了我正确的功能,而且我仍然可以在回发时获得选中的单选按钮和文本框。可能不是最优雅的解决方案,但我找不到其他方法


全文:

在服务器端执行以下操作:

protected void rptRepeaterName_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    RadioButton rdbRadioButtonName = e.Item.FindControl("rdbRadioButtonName") as RadioButton;
    Repeater rptRepeaterName = sender as Repeater;
    rdbRadioButtonName.Attributes.Add("onclick", string.Format("return radioSelected('{0}', '{1}')", rptRepeaterName.ClientID, rdbRadioButtonName.ClientID));
}
在javascript中,执行以下操作

function radioSelected(rptpricelevel, rdbPriceLevel)
{        
    for (cnt = 0; cnt<100; cnt++)
    {            
        var rdbId = rptpricelevel;
        if(cnt < 10)
        {
            rdbId = + '_ctl0' + cnt + '_rdbRadioButtonName';
        }
        else
        {
            rdbId = + '_ctl' + cnt + '_rdbRadioButtonName';
        }
        var rdb = document.getElementById(rdbId);
        if(rdb != null)
        {
            if(rdbId != rdbPriceLevel)
            {
                rdb.checked = false;
            }
        }
     }         
}
功能选择(rptpricelevel,rdbPriceLevel)
{        

对于(cnt=0;cntQuestion?是否需要这些单选按钮作为服务器控件(即,是否需要runat=server标记)?如果没有,您只需在列上有常规的html单选按钮,并使用语法将任何属性绑定到该列。这只是一个想法。@Icarus-我需要它们能够被服务器端代码访问,因为我需要以某种方式将值保留回数据库中。但是我可以使用隐藏字段来指示选择了哪一个。您使用的是asp吗:radiobox还是asp:radioboxlist?@Jefferson先生,是的,将值放入隐藏字段是一种很有技巧的方法,但可以解决您的另一个问题……还有一个建议:您是否尝试覆盖OnRowDataBound并手动将组名分配给每一行。例如:Item.Attributes.Add(“GroupName”,“MYVALUE\u DAMNIT”);这是否在标记上呈现?@Icarus-当我第一次发现引用的Google结果告诉我单选按钮如何分组时,我尝试在中继器的
ItemDataBound
事件中使用
name
属性,当它不起作用时,我看到ASP正在使用该属性。隐藏字段正在工作不过,现在很好;如果您以答案的形式提出建议,我会为您做标记。我最终做了
。使用
$('.myRadioButtonClass')
上的jQuery单击处理程序,使用隐藏字段填充RowID属性,效果非常好。
function radioSelected(rptpricelevel, rdbPriceLevel)
{        
    for (cnt = 0; cnt<100; cnt++)
    {            
        var rdbId = rptpricelevel;
        if(cnt < 10)
        {
            rdbId = + '_ctl0' + cnt + '_rdbRadioButtonName';
        }
        else
        {
            rdbId = + '_ctl' + cnt + '_rdbRadioButtonName';
        }
        var rdb = document.getElementById(rdbId);
        if(rdb != null)
        {
            if(rdbId != rdbPriceLevel)
            {
                rdb.checked = false;
            }
        }
     }         
}