答案 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;
});
});
});
上的示例