c# - Asp.Net MVC 形式, Controller 参数未知

标签 c# asp.net-mvc

我正在构建一个问卷调查 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/

相关文章:

c# - 使用谓词生成器的 LinqKit 堆栈溢出异常

c# - MMC 自定义管理单元安装

c# - 如何在请求结束时释放资源并在 ASP.NET 5/Core 中处理注入(inject)的服务?

javascript - 使单选按钮在加载表单时不被选中?

c# - 一次用多个值填充 C# 结构数组

javascript - Signalr:如何调用其名称在运行时定义的 JavaScript 函数

asp.net-mvc - 如何仅更新 MVC 中已更改的模型属性?

asp.net-mvc - MVC 中 Bootstrap 进度条缺少条纹

c# - 用户在部分 View 中登录并显示错误

c# - 为什么 IDependencyResolver 与 System.Web 紧密耦合?