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

ASP.NET MVC控制器接收模型参数为空,如何解决?

提交表单后模型属性值为空的排查与解决

原代码片段

视图代码

@model FakeModel;

@using (Html.BeginForm("FakeMethod", "FakeController", FormMethod.Post))
{
    <input class="form-control mb-4" name="NewName" asp-for="NewName"/>
    <button type="submit" class="btn btn-primary">New Name</button>
}

模型类代码

public class FakeModel
{
    public string NewName { get; set; }
}

控制器代码

[HttpPost]
public IActionResult FakeMethod(FakeModel fakeModel)
{
    var vName = fakeModel.NewName;
    return RedirectToAction("Home", "Home");
}

问题

提交表单后,控制器中fakeModel.NewName的值始终为空。

问题原因

  1. 重复定义name属性:同时使用name="NewName"和asp-for="NewName",asp-for标签助手会自动生成符合模型绑定规则的name属性,手动添加的name会干扰自动生成逻辑,导致绑定匹配失败。
  2. 模型命名空间缺失:视图中@model FakeModel未指定完整命名空间,可能导致视图无法正确识别模型类型,影响asp-for的正常渲染。
  3. 未显式指定input类型:虽然浏览器默认将input视为type="text",但显式指定类型能避免潜在的渲染异常。

修改方案

使用更新后的视图代码,并确保表单控件包裹在Html.BeginForm代码块内:

@model Solution.Models.FakeModel;

@using (Html.BeginForm("FakeMethod", "FakeController", FormMethod.Post))
{
    <input class="form-control mb-4" type="text" asp-for="NewName" />
    <button type="submit" class="btn btn-primary">New Name</button>
}

修改要点

  • 补充模型完整命名空间Solution.Models.FakeModel,确保视图与模型正确关联
  • 移除手动添加的name="NewName",由asp-for自动生成符合绑定要求的name属性
  • 显式添加type="text",明确输入控件类型
  • 保留Html.BeginForm包裹控件,保证表单能正常提交到指定控制器方法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:19:52