如何从多个自动生成的字段从视图发送回数据到控制器
本文关键字:控制器 视图 数据 字段 自动生成 | 更新日期: 2023-09-27 18:11:02
我正在构建一个应用程序,允许用户通过一系列问题并从4个预先确定的选项中选择他们的回答。我面临的问题是如何将数据发送回控制器。我有一个对象Game
,它拥有一个属性Questions
,而每个问题都拥有一个Code
, Question
和Answer
,都是string
类型。
我已经创建了一个页面,在一个下拉列表中显示每个问题和答案(一旦我弄清楚如何将其放置为单选按钮,我将使用它),但是我被难住了,我应该如何将结果发送回控制器:生成的HTML
代码中的每个select
元素都具有相同的id
,所以我如何区分问题-答案关系从任何其他?
是否有更好的替代方法?我试着用PartialView
来回答每个问题,但如果可能的话,我想坚持用一页纸来列出问题。
我用来创建当前视图的代码如下:
@using (Html.BeginForm("Save", "Game", FormMethod.Post)) {
foreach (var question in Model.Questions) {
<div class="question">
<h4>@vraag.Vraag</h4>
@Html.DropDownListFor(x => question.Code, new SelectList(question .Answers))
@Html.HiddenFor(x => question.Code)
</div>
}
<input type="submit" value="Save" />
}
我想把所有的答案发送回我的控制器,以一种方式,清楚地告诉我哪个答案是什么问题的代码。
您不能使用foreach
来绑定列表,因为它们的名称字段不会被索引(因此模型绑定器不知道如何处理它们)。您需要使用for
循环。试试这个:
for (int i = 0; i < Model.Questions.Count; i++) {
<div class="question">
<h4>@vraag.Vraag</h4>
@Html.DropDownListFor(x => x.Questions[i].Code, new SelectList(Model.Questions[i].Answers))
@Html.HiddenFor(x => x.Questions[i].Code)
</div>
}