作为我关于这个问题的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 (选中)该选项,则值将为"真",否则为"假".

但是,选项列表的值始终为空.

我如何让我的选项与表单的其余部分一起发布到后端?

推荐答案

您输入的You Name属性应为[@i].Options[@j].Value才能与List<OptionViewmodel> Options正确绑定:

<input type="hidden" id="[@j].OptionId" name="[@i].Options[@j].OptionId" value="@option.Id" />
<input class="form-check-input" type="checkbox" id="[@j].Value" name="[@i].Options[@j].Value" value="@option.Id" @_checked />

Javascript相关问答推荐

从实时数据库(Firebase)上的子类别读取数据

fs. writeFile()vs fs.writeFile()vs fs.appendFile()

使用下表中所示的值初始化一个二维数组

如何在Javascript中的控制台上以一行形式打印循环的结果

如何禁用附加图标点击的v—自动完成事件

用JavaScript复制C#CRC 32生成器

jQuery s data()[storage object]在vanilla JavaScript中?'

Promise Chain中的第二个useState不更新

手机上的渲染错误文本必须在文本组件中渲染,但在浏览器上没有问题<><>

如何在 Select 文本时停止Click事件?

<;img>;标记无法呈现图像

从逗号和破折号分隔的给定字符串中查找所有有效的星期几

基于产品ID更新条带产品图像的JavaScript命中错误

在单击按钮时生成多个表单时的处理状态

如何向内部有文本输入字段的HTML表添加行?

使用静态函数保存 node 前的钩子

当一条路由在Reaction路由中命中时,如何有条件地渲染两个组件或更改两个插座?

错误400:当我试图在React中使用put方法时,该字段是必需的

如果未定义,如何添加全局变量

带有JS模块模式的Rails的Importmap错误:";Net::ERR_ABORTED 404(未找到)&Quot;