2 votes

Recevoir des valeurs multiples avec une méthode d'action MVC à partir d'une liste déroulante multi-sélectionnée

Je suis assez novice en matière de MVC.

J'essaie d'envoyer des données (un tableau de type "SurveyAnswer") à une méthode d'action MVC à partir d'un formulaire HTML.

Tout fonctionne bien lorsque je renvoie des données à partir d'une entrée html qui a une seule valeur, comme une Html.TextBox(), mais lorsque l'entrée html a plusieurs valeurs, comme Html.ListBox(), la méthode d'action dans mon contrôleur ne prend que la première de ces valeurs et passe à l'entrée suivante nommée de manière unique dans le tableau. Voici un exemple :

Voici à quoi ressemble mon formulaire Html une fois qu'il a été rendu :

<form action="/test/VoteConfirmation" method="post">

<li>Test RadioButton Question<br/>
<input id="answersArray[0]_SurveyQuestionID" name="answersArray[0].SurveyQuestionID" type="hidden" value="2" />
<ul>
<li>Jane Doe 1<input id="answersArray[0]_SurveyOptionID" name="answersArray[0].SurveyOptionID" type="radio" value="13" /></li>
<li>Jane Doe 2<input id="answersArray[0]_SurveyOptionID" name="answersArray[0].SurveyOptionID" type="radio" value="14" /></li>
<li>Jane Doe 3<input id="answersArray[0]_SurveyOptionID" name="answersArray[0].SurveyOptionID" type="radio" value="15" /></li>
<li>Jane Doe 4<input id="answersArray[0]_SurveyOptionID" name="answersArray[0].SurveyOptionID" type="radio" value="16" /></li>
<li>Jane Doe 5<input id="answersArray[0]_SurveyOptionID" name="answersArray[0].SurveyOptionID" type="radio" value="17" /></li>
<li>Jane Doe 6<input id="answersArray[0]_SurveyOptionID" name="answersArray[0].SurveyOptionID" type="radio" value="18" /></li>
</ul>
</li>

<li>Test SingleList Question<br/>
<input id="answersArray[1]_SurveyQuestionID" name="answersArray[1].SurveyQuestionID" type="hidden" value="3" />
<select id="answersArray[1]_SurveyOptionID" name="answersArray[1].SurveyOptionID">
<option value="19">Jane Doe 7</option>
<option value="20">Jane Doe 8</option>
<option value="21">Jane Doe 9</option>
</select>
</li>

<li>Test TextBox Question<br/>
<input id="answersArray[2]_SurveyQuestionID" name="answersArray[2].SurveyQuestionID" type="hidden" value="4" />
<input id="answersArray[2]_AnswerText" name="answersArray[2].AnswerText" type="text" value="" /></li>

<li>Test DateChoice Question<br/>
<input id="answersArray[3]_SurveyQuestionID" name="answersArray[3].SurveyQuestionID" type="hidden" value="5" />
<input id="answersArray[3]_AnswerText" name="answersArray[3].AnswerText" type="text" value="" />
</li>

<li>Test NumChoice Question<br/>
<input id="answersArray[4]_SurveyQuestionID" name="answersArray[4].SurveyQuestionID" type="hidden" value="6" />
<input id="answersArray[4]_AnswerText" name="answersArray[4].AnswerText" type="text" value="" />
</li>

<li>Test MultiList Question<br/>
<input id="answersArray[5]_SurveyQuestionID" name="answersArray[5].SurveyQuestionID" type="hidden" value="7" />
<select id="answers[5]_SurveyOptionID" multiple="multiple" name="answers[5].SurveyOptionID">
<option value="22">Jane Doe 10</option>
<option value="23">Jane Doe 11</option>
<option value="24">Jane Doe 12</option>
</select></li>

<input type="submit" />

</form>

Comme vous pouvez le constater, lorsque l'utilisateur effectue des sélections dans les cinq premières entrées, celles-ci sont envoyées à la méthode d'action. Les entrées cachées contiennent des informations qui ne changeront pas, dans ce cas, le SurveyQuestionID, et les autres entrées, telles que les TextBoxes, contiennent des données modifiables par l'utilisateur, telles que SurveyAnswer.AnswerText.

Le problème survient lorsque les données de la ListBox sont analysées par l'actionMethod. Il regarde la première valeur sélectionnée disponible pour answers[5].SurveyOptionID l'utilise, ignorant toute autre valeur sélectionnée et passant à l'entrée suivante (s'il y en avait une, il n'y en a pas dans cet exemple).

Comment obtenir ces sélections multiples ? J'ai essayé tout ce que je peux imaginer :(. Merci de m'aider,

Merci d'avance, Matt

1voto

jeef3 Points 1076

Pouvez-vous nous montrer la signature de la méthode d'action ? Prend-elle un argument de type tableau ?

public ActionResult ProcessQuestionnaire(Object[] answersArray, Object[] answers)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X