时间:2011-01-06 16:14:23

标签: asp.net

4 个答案:

答案 0 :(得分:5)

您可以通过覆盖UniqueID的getter来覆盖单选按钮的名称

    private class MyHtmlInputRadioButton : HtmlInputRadioButton
    {
        public override string UniqueID
        {
            get
            {
                return string.IsNullOrEmpty(Name) ? base.UniqueID : Name;
            }
        }
    }

答案 1 :(得分:1)

答案 2 :(得分:0)

答案 3 :(得分:0)

我遇到类似的问题,试图在Repeater控件中使用RadioButton或HtmlInputRadioButton来定义一个无线电组。 RadioButtonList在我的情况下不起作用,因为HTML需要以RadioButtonList不具备的方式呈现(我将Twitter Bootstrap应用于现有的ASP.NET WebForms站点)。

我的解决方法使用JavaScript w / jQuery删除UniqueID信息,该信息被添加到单选按钮的name属性,然后在提交表单时重新应用原始名称属性。必须恢复原始名称,否则当ASP.NET尝试恢复这些控件的状态时,PostBack将发生错误。

这种解决方法在我的场景中运行良好,但要注意任何可能的副作用或边缘情况。我应用它的页面非常简单。我没有验证它是否适用于客户端验证。

以下是我使用的JavaScript代码示例:

$(function(){

    $('input.custom-radio-name').each(function(i, radio){
        var name = radio.name,
            groupNameIndex = radio.name.lastIndexOf('$') + 1,
            groupName = radio.name.substring(groupNameIndex);
        // Preserve the original name, so that it can be restored
        $(this).data('aspnetname', name); 
        radio.name = groupName;
    });

    $('form').submit(function(){
        // Restore the name of the radio buttons,
        // otherwise errors will ensue upon PostBack.
        $('input.custom-radio-name').each(function(i, control){
            var aspnetname = $(this).data('aspnetname');
            control.name = aspnetname;
        });
    });

});

请参阅http://jsfiddle.net/yumN8/

上的示例