作为我关于这个问题的previous question个问题的后续行动,那里提供的解决方案工作得足够好,足以基本回答我问卷中的基本问题.
背景
我允许用户通过指定问题详细信息来创建自定义调查问卷,该问题详细信息包括问题类型,该问题类型确定在客户填写调查问卷时动态呈现的用户界面元素.
所提出的每learnrazorpages.com个列表中绑定的解决方案对于可能只给出一个回答的问题工作得很好,然而,它似乎不太适合于处理用户可能提供任意数量的回答的多项 Select 类型的问题.
以下代码没有将我对多项 Select 题的 Select 注入到表单提交中.
<form method="post">
@for (int i = 0; i <= Model.Questions.Count - 1; i++)
{
var question = Model.Questions[i];
var questionId = Model.Questions[i].Id;
var questionType = Model.Questions[i].Type;
<input type="hidden" id="[@i].QuestionId" name="[@i].QuestionId" value="@questionId" />
@if (questionType == Enums.QuestionType.MultipleChoice)
{
var options = Model.Options.Where(x => x.Question.Id == questionId);
var answers = Model.Answers.WHere(x => x.Question.Id == questionId);
<div class="mb-3">
<p class="mb-0 mt-2">@question.Text</p>
@for (int j = 0; j <= Model.Options.Count() - 1; j++)
{
if (Model.Options[j].Question.Id == questionId)
{
// Determine based on the answer whether or not to check the checkbox.
var option = Model.Options[j];
var isChecked = answers.Any(x => x.Value == option.Id.ToString());
var _checked = isChecked ? "checked" : "";
<div>
<input type="hidden" id="[@j].OptionId" name="[@j].OptionId" value="@option.Id" />
<input class="form-check-input" type="checkbox" id="[@j].Value" name="[@j].Value" value="@option.Id" @_checked />
<label class="form-check-label" for="[@j].Value">@option.Text</label>
</div>
}
}
</div>
}
</form>
我这样构造它,以为它只是将选项列表注入到我的OnPost方法的方法参数值中,因为我为该方法构建的视图模型接受该列表作为参数:
public void OnPost(List<AnswerViewmodel> answers)
{
// I haven't got any logic here yet to save the answers so this is just for a breakpoint.
var answered = answers.Where(x => x.Value is not null);
}
public class AnswerViewmodel
{
public int QuestionId { get; set; }
public string Value { get; set; }
public string Comment { get; set; }
public List<OptionViewmodel> Options { get; set; }
}
public class OptionViewmodel
{
public int OptionId { get; set; }
public string Value { get; set; }
}
如果 Select (选中)该选项,则值将为"真",否则为"假".
但是,选项列表的值始终为空.
我如何让我的选项与表单的其余部分一起发布到后端?