You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core中如何获取未知字段数量的表单数据?

实现动态问卷表单的模型绑定

核心思路

ASP.NET Core的模型绑定支持通过索引式命名规则,将动态生成的表单字段自动绑定到List<SurveyAnswer>集合中,关键是前端表单控件的name属性要符合特定格式。


1. 前端渲染(Razor示例)

假设你从数据库获取的问卷问题列表是List<SurveyQuestion>(包含Id和Title等属性),循环渲染时为每个控件设置正确的name:

@model List<SurveyQuestion>

<form method="post" asp-action="MyAction">
    @for (int i = 0; i < Model.Count; i++)
    {
        <div class="question-item">
            <label>@Model[i].Title</label>
            <!-- 隐藏域传递问题ID,对应SurveyAnswer的QuestionId -->
            <input type="hidden" name="data[@i].QuestionId" value="@Model[i].Id" />
            <!-- 滑块控件传递回答值,对应SurveyAnswer的Value -->
            <input type="range" name="data[@i].Value" min="0" max="255" />
        </div>
    }
    <button type="submit">提交问卷</button>
</form>

关键说明:

  • name属性格式为data[索引].属性名:data要和Action参数名一致,[索引]从0开始连续递增,QuestionId/Value要和SurveyAnswer类的属性名完全匹配
  • 因为Value是byte类型,滑块的max不能超过255,避免提交时类型转换错误

2. 后端Action接收

修正你原来的Action写法(泛型语法错误),直接声明List<SurveyAnswer>类型的参数即可:

public class SurveyAnswer 
{
     public long QuestionId { get; set; }
     public byte Value { get; set; }
}

// 控制器Action
public IActionResult MyAction(List<SurveyAnswer> data) 
{
    // 直接处理data集合,每个元素对应一个问题的回答
    foreach (var answer in data)
    {
        // answer.QuestionId 为问题ID,answer.Value 为滑块选择的值
    }
    return RedirectToAction("Success");
}

3. 动态渲染(JavaScript场景)

如果用JS动态生成表单控件,只要保证name格式正确即可,示例代码:

// 假设questions是从接口获取的问题数组
const form = document.getElementById('survey-form');
questions.forEach((question, index) => {
    const questionDiv = document.createElement('div');
    questionDiv.innerHTML = `
        <label>${question.title}</label>
        <input type="hidden" name="data[${index}].QuestionId" value="${question.id}" />
        <input type="range" name="data[${index}].Value" min="0" max="255" />
    `;
    form.appendChild(questionDiv);
});

内容的提问来源于stack exchange,提问作者Danny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 21:19:55