2009-03-25 5 views
0

Je pense que cela doit être la chose la plus frustrante que j'ai jamais faite dans les formulaires Web. Pourtant, on pourrait penser que ce serait la chose la plus facile à faire au monde. C'est ça:2 "Listes" exclusives de RadioButton

J'ai besoin de 2 listes séparées de boutons radio sur ma page .aspx. Un ensemble permet à un client de sélectionner une option. L'autre ensemble fait aussi mais dans un but différent. Mais un seul ensemble peut avoir un radiobutton sélectionné.

Ok J'ai essayé ceci en utilisant 2 contrôles Radiobuttonlists asp.net sur la même page. J'ai contourné le bogue avec GroupName (asp.net attribue l'uniqueID du contrôle qui empêche le nom de groupe de fonctionner parce que maintenant, 2 radiobuttonlists ne peuvent pas avoir le même nom de groupe pour tous leurs radiobuttons parce que chaque radiobuttonlist a un ID unique différent donc le bogue attribue le identificateur unique comme attribut de nom lorsque les boutons sont rendus, puisque les ensembles de noms sont différents, ils ne sont pas mutuellement exclusifs). Quoi qu'il en soit, j'ai donc créé ce RadioButtonListcontrol personnalisé et résolu ce problème de nom de groupe. Mais quand ça s'est fini, c'est quand je suis allé mettre 2 instances de mon nouveau contrôle radiobuttonlist personnalisé sur ma page .aspx, tout s'est gonflé jusqu'à ce que je remarque que chaque fois que j'ai vérifié radiobuttonlist1.SelectedValue ou radiobuttonlist2.SelectedValue (did peu importe ce que je vérifiais) la valeur toujours crachent string.empty et je n'étais pas capable de comprendre pourquoi (voir http://forums.asp.net/t/1401117.aspx).

Ok sur le troisième essai ce soir et dans l'aube (pas de sommeil). J'ai essayé à la place d'abandonner en essayant d'utiliser 2 listes de radios personnalisées en raison de ce problème string.empty et essayer de cracher 2 ensembles de radiobuttonlists en utilisant 2 répéteurs asp.net et un tag HTML d'entrée standard à l'intérieur. Ça a marché. Ok mais les 2 listes ne sont pas encore mutuellement exclusives. Je peux choisir une valeur dans le premier ensemble de radiobuttons de repeater1 et même pour repeater2. Je ne peux pas pour la vie de moi obtenir les "ensembles" pour être des ensembles mutuellement exclusifs de radiobuttons.

+0

peuvent vous poster le asp.net pertinent et le code derrière le code? –

+0

http://forums.asp.net/t/1401117.aspx – user72603

+0

Si je n'avais pas ce problème avec la chaîne vide à chaque fois, je serais content d'y aller et je pourrais juste vérifier l'identifiant pour voir s'il a un selectedValue qui serait beaucoup plus propre que d'ajouter un index comme tout le monde dit à une valeur de contrôle radio d'entrée standard – user72603

Répondre

4

Comme vous avez deux groupes de boutons radio que vous souhaitez utiliser comme un groupe de boutons radio, la solution est simple: Faites-en un groupe de boutons radio. Le seul problème que vous avez alors est que la valeur que vous obtenez a le même nom dans les deux listes, mais cela peut être résolu en ajoutant un préfixe aux valeurs afin que vous puissiez facilement identifier de quelle liste l'option vient.

+0

alors oui, je ne devrais pas avoir à vous soucier de la chose DB si je peux lier avec deux binds séparés tant que le "nom" attrib est le même. Je vais juste devoir ajouter un préfixe comme vous avez dit quelque chose que je peux enlever dans le code derrière et vérifier si la valeur l'a pour déterminer quelle liste a une sélection. – user72603

+0

Il me semble juste "hacky" code pour maintenir et faire des vérifications sur 2 listes comme ceci. Je ne l'aime pas. – user72603

+0

@unknown: Vous n'avez pas besoin de stocker les valeurs dans la même table de base de données juste pour utiliser le même nom pour les balises html. Séparer le préfixe de la valeur est une opération de chaîne très simple. – Guffa

2

Mise à jour: en fonction des nouvelles informations postées en réponse. L'option que je proposais sur ma réponse initiale correspond à la 3. Vous devez vraiment considérer les points suivants:

  • boutons radio Html ont seulement 1 mécanisme intégré pour gérer l'exclusivité , qui est le nom.
  • Vous demandez explicitement une solution no js, ​​donc, compte tenu de ce qui précède, vous devez manipuler les ID pour y parvenir. Si vous ne bloquiez pas cette option, je suis sûr que quelqu'un trouverait une bibliothèque jquery ou js sympa qui la supporte déjà.
  • L'option 3 est clairement la moins invasive, car vous n'êtes pas obligé d'affecter les données réelles, et ne sont pas affectées par les mises à jour futures.

Il est le code pas tant que ça, juste quelque chose de plus sur la liste des index, et quelque chose de simple:

int? list1Value = null; 
int? list2Value = null; 
var value = Request.Form["somegroup"]; 
if (value.StartsWith("List1")) 
    list1Value = int.Parse(value.Substring(5)); 
else 
    list2Value = int.Parse(value.Substring(5));//Assuming List2 as prefix 

Original:

j'ai vu votre autre question, et vous juste besoin d'utiliser le même nom de groupe. Assurez-vous d'avoir des valeurs différentes pour tous les éléments, quelle que soit la liste d'où ils proviennent. Un moyen d'y parvenir est d'ajouter quelque chose aux valeurs, comme: <% # "List1-" + Eval ("ID")%> et de modifier le code qui lit votre Request.Form ["yourgroupname"].

+0

Encore une fois le même nom de groupe exige que toutes mes données soient maintenu dans une table SQL. Cela signifie aussi maintenant dans mon code, si jamais je veux voir si l'utilisateur a sélectionné l'un des items 1-4 (en supposant un ensemble de 4) ou 5-9 (l'autre ensemble dans le même gorup) je dois faire toutes sortes de vérification funky des valeurs au lieu de vérifier ctrl – user72603

+0

@unknown comme je l'ai dit, vous lieriez comme <% # "List1-" + Eval ("ID")%> et <% # "List2-" + Eval ("ID") %>, pas besoin que les données réelles aient des identifiants différents. Lorsque vous le lisez à partir de Request.Form, vous devez d'abord vérifier s'il se trouvait dans List1 ou List2, puis utiliser l'identifiant dans le contexte/code approprié. – eglasius

0

Je pense que vous devriez simplement utiliser RadioButtons au lieu de RadioButtonLists.

Here's an article qui présente une solution pour résoudre le bug de nommage radiobutton.

+0

Personne ne comprend. Je l'ai fait. Mais cela signifie que toutes vos valeurs doivent être regroupées dans un même groupe et faire en sorte qu'elles soient «séparées». J'ai fait ça. Cela signifie que vos vérifications de code et vos données doivent être piratées pour que cela fonctionne. Vos contrôles doivent maintenant être contre un tas d'index au lieu de 2 ctrls – user72603

+0

oui, j'ai vu cet article. Obtenir les boutons dans le même groupe n'est pas le problème.J'ai dit qu'il essayait de gérer les 2 listes complètement séparées ce qui n'est pas possible avec les radiobuttons car ils doivent tous avoir le même nom de groupe. – user72603

0

Bien que ce post est déjà daté il y a 1 an, je viens de le lire parce que je suis confronté au même problème.

Actuellement, j'ai une solution en utilisant jQuery:

script côté client (vous devez également inclure jQuery)

 function SetRadio(rb) { 
     $('input:checked').attr('checked', false); 
     rb.checked = true; 
    } 

Pour chaque RadioButton (qui est un listitem dans un radiobuttonlist) j'ajouter ce qui suit sur le côté serveur:

li.Attributes.Add("onclick", "javascript:SetRadio(this)"); 

Pour moi, cela fonctionne à la fois dans IE et Firefox, avec 3 radiobuttonlists, sans utiliser de noms de groupes. Vous pouvez vérifier chaque radiobuttonlist pour un paramètre/valeur sélectionné, ou vous pouvez étendre la fonction SetRadio de manière à stocker la valeur sélectionnée dans un champ masqué.

Cordialement, M

Questions connexes