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>&nbsp;</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>&nbsp;</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>
29
demandé sur Beska 2009-08-26 18:04:01

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.

47
répondu fizch 2012-10-09 20:38:38

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>");
    }
}
19
répondu CAbbott 2017-05-24 03:21:39

Je l'ai corrigé en javascript

$(document).ready(function () {
        $("#divWithGridViewOrRepeater input:radio").attr("name", "yourGroupName");
    }); 
10
répondu r3dsky 2012-01-04 07:24:35

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\">";
}
4
répondu Gaurang Jadia 2012-06-03 05:58:59

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");
    }); 
2
répondu Jacob 2015-09-23 19:57:44

je commencerais par ajouter une valeur sur ma valeur de radiobutton='<%#Eval ("CustomerNumber")%>'.

0
répondu Philippe Asselin 2009-08-26 14:15:05

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.

0
répondu Matthew Lock 2013-05-08 01:00:23

c'est un bug bien connu avec le ASP.NET Répéteur utilisant des RadioButtons: voici la meilleure solution à mon avis

0
répondu hmfarimani 2017-05-23 12:32:33

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 ;)

0
répondu cyber 2016-01-29 04:50:13

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();
});
0
répondu Tone Škoda 2017-04-19 00:02:17