Niestety, jest to znany błąd (http://support.microsoft.com/kb/316495), że nieruchomość GroupName nie działa zgodnie z oczekiwaniami, gdy używany w Repeater . Problem polega na tym, że program Repeater implementuje interfejs INamingContainer, który wymaga, aby wszystkie zagnieżdżone formanty miały niepowtarzalną nazwę o unikalnej nazwie po wyrenderowaniu w HTML. Powoduje to przerwanie przycisków radiowych, ponieważ aby mogły one prawidłowo działać, muszą mieć identyczne nazwy: o identycznych nazwach:.
Istnieją 2 obejścia że Natknąłem:
1 - Pierwszy jest po stronie klienta JavaScript rozwiązaniem. Dostarczył go Microsoft support. Lub łatwiejsza do odczytania wersja here. Instrukcje są następujące. Zawierać następujące JavaScript w głowicy:
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;
}
Teraz funkcja musi być powiązana z przycisków radiowych w przypadku OnDataItemBound z repeatera. Zamień „RadioButton” z nazwą swojej kontroli RadioButton i „radiogroup” z GroupName zostały wybrane:
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 - Drugie rozwiązanie jest rozwiązaniem po stronie serwera przy użyciu niestandardowych usercontrol, która dziedziczy RadioButton. Samouczek i kod źródłowy można pobrać tutaj: http://www.codeproject.com/KB/webforms/How_group_RButtons.aspx
W powyższym przykładzie, jeśli dodać właściwość „GROUPNAME” do kontroli , Doda wszystkie radioButton w tej samej grupie, więc tylko jeden przycisk radiowy zostanie wybrany. –
Shivkant
o tak ... zamiast tego powinniśmy użyć tego! – bla
UpdatePanel będzie nadal powodować odświeżenie, tylko, że będzie odświeżenie ajax. Będzie to wymagało czasu, ponieważ musi dotrzeć do/z serwera. – nealkernohan