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

如何解决ASP.NET MVC中「Name字段为必填项」的报错问题?

ASP.NET MVC表单提交必填字段报错排查与解决

问题描述

提交包含ProductVM字段的表单时,明明已添加<input type="hidden" asp-for="@item.Name">隐藏字段,却依然触发「Name字段为必填项」的验证错误。

原因分析

核心问题出在模型绑定的字段名称生成错误:

  • 视图模型使用IEnumerable<ProductVM>,通过foreach循环渲染表单时,asp-for="@item.Name"生成的HTMLname属性为Name,不符合ASP.NET MVC模型绑定的识别格式。
  • 表单提交到AddToCart Action时,模型绑定无法正确识别并绑定Name字段的值,导致ModelState判定Name为空,触发[Required]验证规则。

解决方法

方法1:改用for循环遍历(推荐)

将视图模型改为List<ProductVM>(IEnumerable不支持索引访问),使用for循环渲染表单,让asp-for自动生成带索引的正确name属性:

修改视图模型声明

@model List<ProductVM>

修改循环代码

@for (int i = 0; i < Model.Count; i++)
{
    <tr>
        <td>@Html.DisplayFor(modelItem => Model[i].Name)</td>
        <td>@Html.DisplayFor(modelItem => Model[i].Price)</td>
        <td>@Html.DisplayFor(modelItem => Model[i].CategoryName)</td>
        <form asp-action="AddToCart">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <input type="hidden" asp-for="@Model[i].Id">
            <input type="hidden" asp-for="@Model[i].Name">
            <input type="hidden" asp-for="@Model[i].Price">
            <td>
                <input asp-for="@Model[i].Quantity" value="1" class="form-control" style="inline-size:100px">
                <span asp-validation-for="@Model[i].Quantity" class="text-danger"></span>
            </td>
            <td>
                <input type="submit" id="addtocart" value="Add To Cart" class="btn btn-primary"/>
            </td>
        </form>
    </tr>
}

方法2:手动指定name属性

如果坚持使用foreach循环,可手动设置隐藏字段的name属性,匹配Action参数的字段名:

<input type="hidden" name="Name" value="@item.Name" />
<input type="hidden" name="Id" value="@item.Id" />
<input type="hidden" name="Price" value="@item.Price" />

方法3:检查Action参数定义

确保AddToCart Action的参数是单个ProductVM对象(每个表单仅提交单个产品信息):

[HttpPost]
public IActionResult AddToCart(ProductVM product)
{
    // 处理添加购物车逻辑
    return RedirectToAction("Index");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:33:59