我正在构建一个问卷调查 mvc webapp,但我不知道如何将未知数量的参数从表单传递给 Controller 。
我的表格是这样的:
<% using (Html.BeginForm())
{ %>
<div id="Content">
<% foreach (var group in ViewData.Model.QuestionGroups)
{ %>
<div class="Group">
<%=group.Description %>
<% foreach (var question in group.Questions)
{%>
<div class="Question">
<div class="QuestionTitle">
<%=question.Title %>
</div>
<%=Html.Hidden("Id", question.ID) %>
<div class="QuestionText">
<%switch (question.TypeAsEnum)
{
case QuestionTypeEnum.Text:%>
<%=Html.TextBox("somename") %>
<% break;
case QuestionTypeEnum.Number:%>
<%=Html.TextBox("somename") %>
<% break;
case QuestionTypeEnum.PhoneNumber:%>
<%=Html.TextBox("somename")%>
<% break;
case QuestionTypeEnum.Email:%>
<%=Html.TextBox("somename")%>
<% break;
case QuestionTypeEnum.Date:%>
<%=Html.TextBox("somename")%>
<% break;
case QuestionTypeEnum.YesNo:%>
<%=Html.RadioButton("somename", true)%>
<%=Html.RadioButton("somename", false)%>
<% break;
case QuestionTypeEnum.Alternative:%>
<%=Html.DropDownList("somename", question.Answers)%>
<% break;
}%>
</div>
</div>
<% } %>
</div>
<% } %>
</div>
<div id="submittButton">
<%=Html.SubmitButton()%></div>
<% } %>
现在我在 Controller 中需要的是 List< ResponseAnswer >, 其中 ResponseAnswer 具有以下属性:
字符串问题ID, 字符串答案文本, bool 答案 bool , 编号答案编号, ...
那么我如何将未知数量的包含问题 ID、AnswerType 和 Answer 的项目传递给 Controller 。 在 webforms 中,我通过使用转发器而不是 foreach 呈现表单解决了这个问题,然后遍历检查控件 ID 的问题转发器,每个转发器项目包含一个隐藏的 questionid 元素和一个带有 id=AnswerType 的输入。 但这会严重破坏 mvc 中的关注分离吗?
那么有什么方法可以让我的 Controller 接受 List< ResultAnswer > 并以某种方式在不破坏 soc 的情况下构建此列表,如果没有,我如何将整个 formresult 传回 Controller 以便我可以进行迭代在那里而不是在 View 中形成数据。
最佳答案
你可以给你的 Action 添加一个参数,比如
public ActionResult MyAction(FormCollection form)
然后 form
参数将包含来自已发布表单的所有数据。从那里你可以做你想做的事。
您或许可以实现一个可以映射到 ResponseAnswers 的 Binder ,但我没有这样做的经验,所以我会把它留给其他人。
关于c# - Asp.Net MVC 形式, Controller 参数未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/427746/