视图传参至控制器时List模型始终为null的问题
表单提交后模型回传控制器为null问题解决
问题描述
提交表单后,控制器Post方法接收的AP_UserFormL模型始终为null。浏览器网络面板显示所有表单值已正确传递,但控制器中模型参数仍为null,Get方法展示数据功能正常。
模型代码
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace OTWebApplication.Models { public class AP_UserForm { public String UFID { get; set; } public String UF_YID { get; set; } public String UF_FormID { get; set;} public String UF_FormName { get; set; } public String UF_EvaID { get; set; } // คนประเมิน public String UF_EvaName { get; set; } public String UF_RootID { get; set; } // พนักงาน public String UF_RootName { get; set; } public String UF_Available { get; set; } //ให้ประเมิน หรือไม่ต้องประเมินพนักงานคนนี้ public String UF_STID { get; set; } // สถานะใบประเมิน } public class AP_UserFormL { public List<AP_UserForm> AP_UserForms { get; set; } public AP_UserFormL() { AP_UserForms = new List<AP_UserForm>(); } } }
视图HTML代码
@model OTWebApplication.Models.AP_UserFormL <form asp-action="ManageAP_usershow" method="post"> <table class="table"> <thead> <tr> <th>EmployeeID</th> <th>EmployeeName</th> <th>EvaluatorID</th> <th>FormName</th> <th></th> </tr> </thead> <tbody> @if (Model != null) { @for (var i = 0; i < Model.AP_UserForms.Count(); i++) { <tr> <td> <input type="hidden" asp-for="@Model.AP_UserForms[i].UFID" class="form-control" /> <input type="hidden" asp-for="@Model.AP_UserForms[i].UF_YID" class="form-control" /> <input type="hidden" asp-for="@Model.AP_UserForms[i].UF_STID" class="form-control" /> <input asp-for="@Model.AP_UserForms[i].UF_RootID" class="form-control" /> </td> <td> <input asp-for="@Model.AP_UserForms[i].UF_RootName" class="form-control" /> </td> <td> <select asp-for="@Model.AP_UserForms[i].UF_EvaID" class="form-control"> @foreach (var item in ViewBag.ARoot) { <option value="@item.ARoot_ID">@item.ARoot_Name</option> } <option value="@Model.AP_UserForms[i].UF_EvaID">@Model.AP_UserForms[i].UF_EvaName</option> </select> </td> <td> <select asp-for="@Model.AP_UserForms[i].UF_FormID" class="form-control"> @foreach (var item in ViewBag.Form) { <option value="@item.FormID">@item.FormName</option> } <option value="@Model.AP_UserForms[i].UF_FormID">@Model.AP_UserForms[i].UF_FormName</option> </select> </td> <td> <select asp-for="@Model.AP_UserForms[i].UF_Available" class="form-control"> <option value="0">ไม่ต้องประเมิน</option> <option value="1">ประเมินปกติ</option> </select> </td> </tr> } } </tbody> </table> <button input type="submit"value="Edit">Update</button> </Form>
控制器代码
public IActionResult ManageAP_usershow(String id) { AP_UserFormL ShowAPList = ManageAP_usershowList(id); ViewData["ARoot"] = GetARoot(); ViewData["Form"] = GetForm(); return View(ShowAPList); } [HttpPost] public IActionResult ManageAP_usershow([FromBody] AP_UserFormL model) { foreach(var item in model.AP_UserForms) { if (ModelState.IsValid) { Console.WriteLine("pass"); } } return RedirectToAction("ManageAP", "Appraisal"); }
解决方案
1. 移除[FromBody]特性
表单默认提交application/x-www-form-urlencoded格式数据,而[FromBody]特性用于接收JSON格式请求体,两者不匹配导致模型无法绑定。修改Post方法:
[HttpPost] public IActionResult ManageAP_usershow(AP_UserFormL model) { if (ModelState.IsValid && model?.AP_UserForms != null) { foreach(var item in model.AP_UserForms) { Console.WriteLine("pass"); } } return RedirectToAction("ManageAP", "Appraisal"); }
2. 修复提交按钮的错误写法
原按钮代码中的input属性多余,修正为:
<button type="submit">Update</button>
3. 验证表单元素Name属性(可选)
asp-for标签助手会自动生成正确的Name属性(如AP_UserForms[0].UFID),确保表单字段能正确映射到集合模型。可通过浏览器检查元素确认Name格式是否正确。
内容的提问来源于stack exchange,提问作者Manatchanok Bumrungban
相关产品推荐
相关产品推荐

