不幸的是,这是一个已知的错误(http://support.microsoft.com/kb/316495 http://support.microsoft.com/kb/316495)当在 Repeater 中使用时,GroupName 属性无法按预期工作。问题在于 Repeater 实现了 INamingContainer 接口,该接口要求所有嵌套控件都有一个独特的名字当渲染为 HTML 时。这会导致单选按钮损坏,因为为了使它们正常工作,它们必须具有相同的名字.
我遇到过两种解决方法:
1 - 第一个是客户端 JavaScript 解决方案。它是由微软支持 https://groups.google.com/forum/#!topic/microsoft.public.dotnet.framework.aspnet/IqIZ_Tg-jbA。或者更容易阅读的版本here http://weblogs.asp.net/joseguay/archive/2008/07/24/having-radiobuttons-on-a-repeater-or-datalist.aspx。
说明如下。在 HEAD 中包含以下 javascript:
function SetUniqueRadioButton(nameregex, current)
{
re = new RegExp(nameregex);
for(i = 0; i < document.forms[0].elements.length; i++)
{
elm = document.forms[0].elements[i]
if (elm.type == 'radio')
{
if (re.test(elm.name))
{
elm.checked = false;
}
}
}
current.checked = true;
}
现在,该函数需要链接到转发器的 OnDataItemBound 事件中的单选按钮。将“RadioButton”替换为 RadioButton 控件的名称,将“RadioGroup”替换为您选择的 GroupName:
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return;
RadioButton rb = (RadioButton) e.Item.FindControl("RadioButton");
string script = "SetUniqueRadioButton('Repeater1.*RadioGroup',this)";
rb.Attributes.Add("onclick", script);
}
2 - 第二种解决方案是使用继承自 RadioButton 的自定义用户控件的服务器端解决方案。教程和源代码可以在这里下载:http://www.codeproject.com/KB/webforms/How_group_RButtons.aspx http://www.codeproject.com/KB/webforms/How_group_RButtons.aspx