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

表单值未传递至控制器:ASP.NET MVC提交List<SampleVM>为空问题

问题分析与解决方案

核心问题

List参数绑定为null的原因有两个:

  1. 控制器方法参数存在语法错误
  2. 表单字段的name属性格式不符合ASP.NET MVC集合绑定规则,且前缀与参数名不匹配

步骤1:修正控制器方法参数语法

你的SaveSamples方法参数写法有误,正确的泛型List定义如下:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SaveSamples(List<SampleVM> samples) // 修正泛型语法错误
{
     if (ModelState.IsValid)
     {
          Sample sample = new Sample();
          db.Samples.Add(sample);
          db.SaveChanges(); // 补充保存数据的操作
          return RedirectToAction("Create");
      }
      return View(samples);
}

步骤2:修正表单字段的name属性格式

ASP.NET MVC的集合绑定要求字段遵循索引式命名规则,才能正确识别集合中的每一项。结合你的场景,推荐以下可靠方案:

方案:修改分部视图,生成符合绑定规则的name属性

在FilterAttributes.cshtml分部视图中,循环渲染每个属性项时,显式指定参数前缀samples和索引,确保生成的字段name匹配控制器的集合参数:

@model IEnumerable<IQC.ViewModels.SampleVM>

@{
    var index = 0;
}
@foreach (var item in Model)
{
    <tr>
        <td>
            @Html.Hidden("samples[" + index + "].SpecificationAttributeId", item.SpecificationAttributeId)
        </td>
        <td>
            @Html.Hidden("samples[" + index + "].AttributeId", item.AttributeId)
        </td>
        <td>
            @Html.TextBox("samples[" + index + "].Value", item.Value)
        </td>
    </tr>
    index++;
}

修改后生成的字段name会是samples[0].SpecificationAttributeId、samples[1].AttributeId这类格式,模型绑定器能准确识别并绑定到List<SampleVM> samples参数中。


额外修正点

你的JavaScript代码存在语法错误,拼接queryString时的=应该改为+:

var queryString = url + '?specificationName=' + specificationName + '&lotId=' + lotId;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:40:12