ASP.NET Razor表单提交后模型为空,求助获取前端修改后模型
问题解决方法
针对你的两个疑问,直接给出解决方案:
1. 如何为saveTagging方法中的模型传入参数?
不需要手动给模型传参数,ASP.NET MVC的模型绑定机制会自动完成这个工作。你只需要按以下方式定义SaveTagging方法:
[HttpPost] public ActionResult SaveTagging(TaggingViewModel model) { // 这里的model就是前端提交后自动填充好的对象 // 执行保存逻辑 return RedirectToAction("Tagging", new { id = model.MainNodes[0].children[0].ItemId, itemType = model.MainNodes[0].children[0].ItemType }); }
同时确保前端表单通过Html.BeginForm或原生<form>标签指向这个Post方法,比如:
@using (Html.BeginForm("SaveTagging", "YourControllerName", FormMethod.Post)) { // 你的表单内容(包括CheckBoxFor、HiddenFor等控件) <input type="submit" value="保存" /> }
2. 获取前端修改后的模型,而非旧模型
核心是不要在Post方法里重新实例化模型,直接用方法参数接收MVC自动绑定后的对象即可。
要保证模型绑定正常工作,还需要满足几个前提:
TaggingViewModel的所有需要绑定的属性必须有get和set访问器,比如:public class TaggingViewModel { public List<MainNode> MainNodes { get; set; } // 必须有set // 其他属性同理 } public class MainNode { public List<ChildNode> children { get; set; } // 必须有set // 其他属性 } public class ChildNode { public bool IsChecked { get; set; } public int ItemId { get; set; } public int GlobalTaggingId { get; set; } public ItemType ItemType { get; set; } }- 集合类型(比如
MainNodes、children)必须是List<T>这类支持索引访问的可枚举类型,MVC才能正确绑定集合中的元素。 - 所有需要提交的控件都必须放在表单内部,否则其值不会被发送到后端。
如果绑定后模型仍为空或部分属性缺失,可以通过ModelState.IsValid检查绑定状态,或者打印ModelState.Values查看具体绑定错误,定位问题。
内容的提问来源于stack exchange,提问作者inno
相关产品推荐
相关产品推荐

