RadioButtons没有在ASP.NET 2.0转发器中正确分组

时间:2011-08-26 21:17:05

标签: asp.net radio-button asp.net-2.0 repeater

我在ASP.NET 2.0中有一个Web应用程序,我需要有一个高度自定义的网格。网格中的一列包含每行的单选按钮。

我将其作为Repeater控件实现,每个div都有ItemTemplate。问题是单选按钮(ASP:RadioButton标签)没有像他们应该那样分组;选择其中一个并不会取消选择其余部分。我已经在它们上设置了GroupName属性,但是我没有看到通过Firebug在HTML中进行渲染。谷歌搜索tells me<input type='radio>上的“name”属性决定了它的组成员资格,但ASP已经将其用作某种唯一标识符。渲染为HTML时,每个单选按钮看起来都是这样的:

<input id="{asp_garbage_naming}_ctl01_rbFoo" type="radio"
   name="ctl03$controlName$otherControlName$ctl01$name"
   value="rbHost" checked="checked" />

有没有办法让这项工作?或者我将不得不自己提供单选按钮行为(javascript等)?

3 个答案:

答案 0 :(得分:1)

一位同事遇到了这个问题并实施了一个jQuery解决方案。这是摘录:

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

var radios = $("input:radio");
radios.click(function() {
     radios.removeAttr('checked');
     $(this).attr('checked', 'checked');
     return true;
});

这给了我正确的功能,我仍然可以在回发时获得所选的单选按钮和文本框。可能不是最优雅的解决方案,但我找不到任何其他方法来做到这一点。

完整帖子:Radio button within a repeater problem

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

的问题?您是否需要这些单选按钮作为服务器控件(即您是否需要runat = server标签)?如果没有,您可以在列上使用常规html单选按钮,并使用<%#Eval("Property")%>语法将任何属性绑定到该列。只是一个想法