2009-08-13 24 views
2

我对MVC很新颖。从多选择列表框中接收MVC操作方法的多个值

我想从HTML表单向MVC操作方法发布数据(“SurveyAnswer”类型的数组)。

一切工作正常,我从具有单个值的HTML输入(如Html.TextBox())传回数据,但是当html输入具有多个值(如Html.ListBox())时,操作方法在我的控制器中,只取这些值中的第一个值,并转到数组中的下一个唯一命名的输入。这里有一个例子:

这里是我的HTML表单看起来是渲染后:

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

正如你可以看到,当用户在第一5个输入选择,它们发布到行动方法。隐藏的输入保存不会改变的信息,在这种情况下为SurveyQuestionID,其他输入(如文本框)保存用户可修改的数据,如SurveyAnswer.AnswerText。

问题出在ListBox数据由actionMethod解析时出现。它查看可用于答案的第一个选定值[5] .SurveyOptionID使用该值,忽略任何其他选定值并转到下一个输入(如果有,则在本例中不存在)。

如何获得这些多选!我已经提前尝试一切我能想到:(中。 请帮帮忙,

谢谢, 马特

回答

1

,你能否告诉我们动作方法的签名?难道是服用数组参数?

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