web-dev-qa-db-fra.com

Groupe de boutons radio ASP.NET

J'ai actuellement un problème avec les boutons radio et le groupement. J'ai un bouton radio ASP dans un contrôle de répéteur. J'ai l'attribut de nom de groupe défini sur "Client". Lorsque la page se charge, les boutons radio ne sont pas regroupés. Au lieu des champs d'identification étant définis sur le nom du groupe, il définit les champs de valeur des boutons radio. Je sais que j'ai essayé de définir des boutons radio en dehors d'un contrôle de répéteur et j'ai eu le même problème. Qu'est-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
fizch

J'ai finalement entendu cela en créant un bouton radio uni et en définissant la valeur à l'aide d'un eval Server-Side.

<input type="radio" name="radCustomer" value='<%#Eval("CustomerNumber") %>' />

Maintenant, lorsque l'application effectue un potager, je vérifie la valeur de la requête.Form ["Radcustomer"]. Cela fonctionne parfaitement.

48
fizch

Malheureusement, il s'agit d'un problème bien problème connu avec des boutons radio dans un répéteur . L'une de vos seules options serait de créer un contrôle de serveur personnalisé dérivé de la classe Radiobutton et de remplacer la manière dont il se rend.

[~ # ~] Edit [~ # ~ ~] : Voici un échantillon de ce que 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
CAbbott

Je l'ai réparé en JavaScript

$(document).ready(function () {
        $("#divWithGridViewOrRepeater input:radio").attr("name", "yourGroupName");
    }); 
10
r3dsky

J'ai eu les mêmes problèmes. J'utilise littéral comme espace réservé pour rendre l'événement OnsetemCreated.

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
Gaurang Jadia

Je devais modifier légèrement la réponse postée ci-dessus par R3DSKY.

Voici ce qui a fonctionné pour moi:

$(document).ready(function () {
        $(".divWithGridViewOrRepeater input:radio").attr("name", "yourGroupName");
    }); 
2
Jacob

Ceci est un bug bien connu avec le répéteur ASP.NET à l'aide de boutons radio: Ici meilleure solution à mon avis

0
hmfarimani

J'ai fait que mon Radiobutton ait un autopostback défini sur true, puis dans le gestionnaire d'événements, tous les autres boutons radio sont désélectionnés.

Pas idéal, mais j'ai besoin de beaucoup de contrôle sur la visibilité et les attributs activés du Radiobutton, et il semblait plus facile de laisser le contrôle ASP.NET plutôt que de recourir au script côté client.

0
Matthew Lock

Ma solution, semblable aux 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
Tone Škoda

Je commencerais en ajoutant une valeur sur ma valeur de bouton radio = '<% # eval ("numéro de client")%>'.

0
Philippe Asselin

J'ai fait ça:

$("input:radio").attr("name", $("input:radio").first().attr("name"));

Pourquoi? Étant donné que si vous remplacez la propriété Nom pour une chaîne souhaitée, vous obtiendrez une erreur "non trouvée". Donc, vous devez obtenir le nom du premier Radiobutton et renommer tous avec ce nom. Ça marche comme un charmant;)

0
cyber