Malheureusement, il est un bug connu (http://support.microsoft.com/kb/316495) que la propriété GroupName ne fonctionne pas comme prévu lorsqu'il est utilisé dans un répéteur . Le problème est que le répéteur implémente l'interface INamingContainer qui exige que tous les contrôles imbriqués aient un nom unique lorsqu'il est rendu au format HTML. Cela provoque la rupture des boutons radio car, pour qu'ils fonctionnent correctement, ils doivent avoir les mêmes noms .
Il y a 2 contournements que j'ai rencontré:
1 - Le premier est un javascript côté client solution. Il a été fourni par Microsoft support. Ou une version plus facile à lire here. Les instructions sont les suivantes. Inclure le javascript suivant dans le HEAD:
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;
}
Maintenant, la fonction doit être liée aux boutons radio en cas OnDataItemBound du répéteur. Remplacer « RadioButton » avec le nom de votre contrôle RadioButton et « RadioGroup » avec le nom de groupe que vous avez choisi:
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 deuxième solution est une solution côté serveur à l'aide d'un UserControl personnalisé qui hérite de RadioButton. Le tutoriel et le code source peuvent être téléchargés ici: http://www.codeproject.com/KB/webforms/How_group_RButtons.aspx
Pour l'exemple ci-dessus, si vous ajoutez la propriété "GroupName" pour le contrôle , Il va ajouter tous les radioButton sous le même groupe de sorte qu'un seul bouton radio sera sélectionné. –
Shivkant
oh ouais .. nous devrions utiliser cela à la place! – bla
Un UpdatePanel provoquera toujours un postback, juste que ce sera une publication ajax. Il faudra encore du temps car il doit acheminer vers/depuis le serveur. – nealkernohan