asp.net groupe de boutons radio
j'ai actuellement un problème avec les boutons radio et le regroupement. J'ai un bouton radio asp dans le contrôle d'un répéteur. J'ai l'attribut de nom de groupe défini à"client". Lorsque la page se charge, les boutons radio ne sont pas groupés. Au lieu que les champs d'id soient définis au nom du groupe, il est en train de définir les champs de valeur des boutons radio. Je sais que j'ai essayé de mettre des boutons radio en dehors d'un contrôle de répéteur et que j'ai eu le même problème. Ce qui se passe ici?
aspx
<asp:Repeater ID="repCustomers" runat="server">
<HeaderTemplate>
<table class="tableDefault" cellpadding="0" cellspacing="0" border="0" style="width: 383px; border: 0px !important">
<tr>
<th> </th>
<th>Cust. No.</th>
<th>Cust. Name</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:RadioButton ID="radCustomer" GroupName="Customer" runat="server" ValidationGroup="Customer" ToolTip='<%#Eval("CustomerNumber") %>' />
</td>
<td><%#Eval("CustomerNumber")%></td>
<td><%#Eval("Name") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
sortie html
<table class="tableDefault" cellpadding="0" cellspacing="0" border="0" style="width: 383px; border: 0px !important">
<tr>
<th> </th>
<th>Cust. No.</th>
<th>Cust. Name</th>
</tr>
<tr>
<td>
<span title="111111"><input id="ctl00_PrimaryContent_repCustomers_ctl01_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl01$Customer" value="radCustomer" /></span>
</td>
<td>111111</td>
<td>Jeremy's Test</td>
</tr>
<tr>
<td>
<span title="222222"><input id="ctl00_PrimaryContent_repCustomers_ctl02_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl02$Customer" value="radCustomer" /></span>
</td>
<td>222222</td>
<td>My Test</td>
</tr>
<tr>
<td>
<span title="333333"><input id="ctl00_PrimaryContent_repCustomers_ctl03_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl03$Customer" value="radCustomer" /></span>
</td>
<td>333333</td>
<td>Jim Bob's BBQ</td>
</tr>
<tr>
<td>
<span title="444444"><input id="ctl00_PrimaryContent_repCustomers_ctl04_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl04$Customer" value="radCustomer" /></span>
</td>
<td>444444</td>
<td>New Hope Hamburgers</td>
</tr>
<tr>
<td>
<span title="555555"><input id="ctl00_PrimaryContent_repCustomers_ctl05_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl05$Customer" value="radCustomer" /></span>
</td>
<td>555555</td>
<td>Pied Piper Pizza</td>
</tr>
<tr>
<td>
<span title="666666"><input id="ctl00_PrimaryContent_repCustomers_ctl06_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl06$Customer" value="radCustomer" /></span>
</td>
<td>666666</td>
<td>Sandy's Subs</td>
</tr>
<tr>
<td>
<span title="777777"><input id="ctl00_PrimaryContent_repCustomers_ctl07_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl07$Customer" value="radCustomer" /></span>
</td>
<td>777777</td>
<td>Leonard's Lambchops</td>
</tr>
<tr>
<td>
<span title="888888"><input id="ctl00_PrimaryContent_repCustomers_ctl08_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl08$Customer" value="radCustomer" /></span>
</td>
<td>888888</td>
<td>Dave's Diamond Deli</td>
</tr>
<tr>
<td>
<span title="999999"><input id="ctl00_PrimaryContent_repCustomers_ctl09_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl09$Customer" value="radCustomer" /></span>
</td>
<td>999999</td>
<td>Ernie's Eatery</td>
</tr>
</table>
10 réponses
j'ai finalement contourné cela en créant un bouton radio simple et en réglant la valeur en utilisant une eval côté serveur.
<input type="radio" name="radCustomer" value='<%#Eval("CustomerNumber") %>' />
maintenant quand l'application effectue un postback, je vérifie la valeur de la requête.Forme ["radCustomer"]. Cela fonctionne parfaitement.
malheureusement, il s'agit d'un bien problème connu avec des boutons radio dans un répéteur . Une de vos seules options serait de créer un contrôle de serveur personnalisé dérivé de la classe RadioButton et de modifier la façon dont il rend.
EDIT : voici un exemple de ce à quoi la classe dérivée peut ressembler:
public class MyRadioButton : RadioButton
{
protected override void Render(HtmlTextWriter writer)
{
writer.Write("<input id=\"" + base.ClientID + "\" ");
writer.Write("type=\"radio\" ");
writer.Write("name=\"" + base.ID + "\" ");
writer.Write("value=\"" + base.ID + "\" />");
writer.Write("<label for=\"" + base.ClientID + "\">");
writer.Write(base.Text);
writer.Write("</label>");
}
}
Je l'ai corrigé en javascript
$(document).ready(function () {
$("#divWithGridViewOrRepeater input:radio").attr("name", "yourGroupName");
});
j'ai eu les mêmes problèmes. J'utilise Literal comme placeholder pour rendre le bouton radio onitemcreated event.
ASP.Net
<asp:Repeater ID="rpt" runat="server" OnItemCreated="rpt_OnItemCreated">
<ItemTemplate>
<asp:Literal ID="lit" runat="server"></asp:Literal>
</ItemTemplate>
</asp:Repeater>
c#
protected void rpt_OnItemCreated(object sender, RepeaterItemEventArgs e) {
Literal lit = (Literal)e.Item.FindControl("lit");
lit.Text = "<input type=\"radio\" name=\"myGroup\">";
}
j'ai dû modifier légèrement la réponse de r3dsky.
voici ce qui a fonctionné pour moi:
$(document).ready(function () {
$(".divWithGridViewOrRepeater input:radio").attr("name", "yourGroupName");
});
je commencerais par ajouter une valeur sur ma valeur de radiobutton='<%#Eval ("CustomerNumber")%>'.
j'ai fait mon radiobutton ont autopostback réglé à true, et puis dans l'événement handler régler tous les autres boutons radio à ne pas être sélectionné.
pas idéal, mais j'ai besoin de beaucoup de contrôle sur la visibilité et les attributs activés du radiobutton, et il a semblé plus facile de laisser ASP.NET contrôlez cela plutôt que de recourir au script côté client.
c'est un bug bien connu avec le ASP.NET Répéteur utilisant des RadioButtons: voici la meilleure solution à mon avis
j'ai fait ceci:
$("input:radio").attr("name", $("input:radio").first().attr("name"));
pourquoi? parce que si vous remplacez la propriété name pour n'importe quelle chaîne de caractères que vous voulez, vous obtiendrez une 'erreur non trouvée'. Donc, vous devez obtenir le nom du premier radiobutton, et les renommer tous avec ce nom. Il fonctionne comme un charm ;)
ma solution, semblable à d'autres:
<input id="ctlRadio" runat="server" type="radio" data-fixgroupbug="1" >
// Fixes this ASP.NET bug: if radio input is inside repeater you can't set its name.
// Every input gets set different name by ASP.NET.
// They don't behave as a group. You can select multiple radios.
function fixRadiogroupBug()
{
$('[type="radio"][data-fixgroupbug]').click(function () {
$(this).siblings('[type="radio"]').prop('checked', false);
});
}
$(document).ready(function () {
fixRadiogroupBug();
});