【发布时间】:2019-09-27 23:00:10
【问题描述】:
我知道一个视图只能有一个模型,所以我将这两个模型放在一个文件 SurveyForm.xml 中。如何获取结果、已回答的问题并将其发送给控制器?
public class SurveyForm
{
public List<Question> SurveyQuestions { get; set; }
public List<Answer> SurveyResults { get; set; }
}
public class Question
{
public int Id { get; set; }
public int? ParentID { get; set; }
public string Text { get; set; }
public List<Response> Responses { get; set; }
public List<Question> SubQuestions { get; set; }
public string RenderType { get; set; }
}
public class Answer
{
public int ResponseID { get;
public string Value { get; set; }
}
我通过问题循环呈现问题,有一些子问题,所以我有嵌套循环(三层循环)。我能够提出这些问题,但获得结果对我来说并不容易。如果我制作一个由问题和答案列表组成的 SurveyForm 模型,如何为列表中的每个 Result 项目设置 ResponseID 和 Value?使用 for 循环将不起作用,因为有 20 个响应,但有 7 个问题和 13 个子问题。
这是我正在渲染的视图的一部分:
@model MyApp.Models.SurveyForm
@{
ViewBag.Title = "Survey";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("SubmitForm", "Survey"))
{
int orderNumber = 1;
foreach (var item in Model.SurveyQuestions)
{
<div> @(orderNumber++)) @item.Text </div> //just a title of the question
if (item.RenderType == "Radiobutton")
{
<div>
@foreach (var subitem in item.Responses)
{
<div>
@Html.RadioButton(subitem.QuestionID.ToString(), subitem.ResponseID)
@Html.Label(subitem.Text)
</div>
}
</div>
<div @Html.TextArea(item.SubQuestions.FirstOrDefault().Answers.FirstOrDefault().ResponseID.ToString(), null, new { @class = "form-control" })</div>
}
if (item.RenderType == "Textbox")
{
<div>
@Html.TextArea(item.Id.ToString(), null, new { @class = "form-control" })
</div>
}
}
}
【问题讨论】: