Por desgracia, es un error conocido (http://support.microsoft.com/kb/316495) que la propiedad GroupName no funciona como se esperaba cuando se utiliza en un repetidor . El problema es que el repetidor implementa la interfaz INamingContainer que requiere que todos los controles anidados tengan un nombre único cuando se procesan en HTML. Esto hace que los botones de opción se rompan porque para que funcionen correctamente deben tener nombres idénticos.
Hay 2 soluciones temporales que yo he encontrado:
1 - La primera es una del lado del cliente JavaScript solución. Fue proporcionado por Microsoft support. O una versión más fácil de leer here. Las instrucciones son las siguientes. Incluir la siguiente JavaScript en la CABEZA:
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;
}
Ahora la función tiene que estar relacionado con los botones de opción en caso OnDataItemBound del repetidor. Reemplazar "RadioButton" con el nombre de su control RadioButton y "RadioGroup" con el Nombre de grupo que ha elegido:
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 - La segunda solución es una solución de servidor utilizando un control de usuario personalizado que hereda de RadioButton. El tutorial y el código fuente se pueden descargar aquí: http://www.codeproject.com/KB/webforms/How_group_RButtons.aspx
Para el ejemplo anterior, si se agrega la propiedad "Nombre de grupo" para el control , Se agregará todo el radioButton en el mismo grupo, por lo que solo se seleccionará un botón de opción. –
Shivkant
oh sí ... deberíamos usar eso en su lugar! – bla
Un UpdatePanel todavía causará una devolución de datos, solo que será una devolución de datos de Ajax. Todavía tomará tiempo ya que debe enrutar hacia/desde el servidor. – nealkernohan