2009-06-17 8 views
0

J'ai essayé de suivre this mais le modelbinder par défaut a laissé ma matrice nulle côté serveur.Utilisation de tableaux de radiobutton HTML dans ASP.NET MVC

HTML:

Question 1: 
<input name="list[0]" type="radio" value="1000" />No 
<input name="list[0]" type="radio" value="1001" />Yes 
Question 2: 
<input name="list[1]" type="radio" value="1002" />No 
... 

Action de contrôleur:

public ActionResult Anamnesis(string[] list) 
{ 

Si je choisis la deuxième "Non" (liste [0] est manquante), le DefaultModelBinder est impossible de le transformer en un tableau.

Merci d'avance!

Mise à jour # 1

Reformaté basé sur le commentaire, merci!

Mise à jour # 2

Juste un tought: créé une entrée cachée après tous les élément de la liste, et ainsi il fonctionne. Mais c'est moche, sans aucun doute.

Question 1: 
<input name="list[0]" type="radio" value="1000" />No 
<input name="list[0]" type="radio" value="1001" />Yes 
<input type="hidden" name="list[0]"/> 
Question 2: 
<input name="list[1]" type="radio" value="1002" />No 
<input type="hidden" name="list[1]"/> 
... 

Commandez-est très importante: la valeur cachée ne présente que lorsque la radio est désactivée. L'idée vient des assistants ASP.NET MVC. (Btw je ne peux pas utiliser Html.RadioButton pour archiver ce comportement.)

+1

Les tableaux sont basés sur zéro en C#. Serait un début. –

+0

True! Fonctionne très bien si je choisis le premier élément - mais si je choisis une autre option (liste [2]) cela échouera. Il semble que le classeur par défaut nécessite un tableau à base zéro. Mais ce n'est pas possible avec les boutons radio ... Puis-je passer à jQuery pour créer des requêtes. – boj

+0

S'il s'agit de boutons radio, c'est-à-dire qu'ils s'excluent mutuellement (choisissez l'un ou l'autre), vous devez leur donner le même nom. Sinon, si les noms sont différents, ils sont traités comme des "ensembles" séparés, et il serait possible de les avoir // tous les deux // sélectionnés! (Et aucun moyen de désélectionner.) - Mike – Funka

Répondre

0

Votre mise à jour # 2 semble avoir résolu votre problème. Votre mise à jour # 2 est également intéressante en ce sens que vous pouvez également utiliser cette approche pour fournir une valeur par défaut (telle que 999) à utiliser chaque fois que rien n'est vérifié.

Il existe peut-être une autre façon similaire de faire ce que vous demandez, qui est basé sur this article et qui utilise également des entrées cachées. L'idée est que vous pouvez créer des index pour chacun de vos postes de radio, afin d'éviter la situation dans laquelle une sélection manquante plus tôt sous la forme fait toutes les sélections suivantes soient abandonnées:

Question 1: 
<input name="list.Index" type="hidden" value="0" /> 
<input name="list[0]" type="radio" value="1000" />No 
<input name="list[0]" type="radio" value="1001" />Yes 
Question 2: 
<input name="list.Index" type="hidden" value="1" /> 
<input name="list[1]" type="radio" value="1000" />No 
<input name="list[1]" type="radio" value="1001" />Yes 

La raison pour laquelle je suggère cela, est en le cas où vous aimeriez associer vos réponses à une question spécifique par un identifiant unique, au lieu de simplement utiliser 0, 1, 2, etc. L'article que je lierai montrera un exemple de la façon de procéder.

Bonne chance!
-Mike

+0

Solution plus propre que la mienne, merci! – boj

-1

L'attribut name du bouton radio doit être list, pas list [n].

+0

Ceci est une liste de réponses possibles à la question. Les réponses à la première question sont list [0], la liste des réponses à la deuxième question [1], etc.Si j'écris simplement "list" au lieu de l'indexer, l'utilisateur peut sélectionner une seule réponse _per_ page. – boj

+0

puis utilisez une case à cocher – eulerfx

Questions connexes