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的值始终为空。
问题原因
- 重复定义name属性:同时使用
name="NewName"和asp-for="NewName",asp-for标签助手会自动生成符合模型绑定规则的name属性,手动添加的name会干扰自动生成逻辑,导致绑定匹配失败。 - 模型命名空间缺失:视图中
@model FakeModel未指定完整命名空间,可能导致视图无法正确识别模型类型,影响asp-for的正常渲染。 - 未显式指定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
相关产品推荐
相关产品推荐

