MVC视图模型未回传至控制器问题排查求助
问题:POST请求无法将模型正确回传至控制器
我已经碰到好几个类似的问题了,但这次实在摸不着头脑——我的POST请求就是没法把前端的模型数据正确传递到后端控制器里。
我已经做了这些排查:
- 仔细核对了控制器接收的模型字段命名,确保和前端表单字段的大小写、拼写完全一致
- 移除了模型里的所有只读字段,担心是这类字段导致绑定失败,但问题依然存在
现在我最大的怀疑是BindAttribute绑定多选框的RoleIds字段出了问题,因为这是一个集合类型的字段,可能绑定规则哪里没配置对。
下面是我的相关代码:
模型定义
public class UpdateUserModel { public int Id { get; set; } public string Username { get; set; } public string Email { get; set; } // 怀疑绑定失败的多选框字段 public List<int> RoleIds { get; set; } }
控制器代码
[HttpPost] public IActionResult UpdateUser([Bind("Id,Username,Email,RoleIds")] UpdateUserModel model) { if (!ModelState.IsValid) { // 这里ModelState始终无效,RoleIds要么为空要么没正确绑定 return View(model); } // 后续业务逻辑... return RedirectToAction("Index"); }
前端多选框代码(Razor视图)
<div class="form-group"> <label asp-for="RoleIds"></label> @foreach (var role in ViewBag.Roles) { <div class="form-check"> <input class="form-check-input" type="checkbox" name="RoleIds" value="@role.Id" @(Model.RoleIds?.Contains(role.Id) == true ? "checked" : "")> <label class="form-check-label">@role.Name</label> </div> } <span asp-validation-for="RoleIds" class="text-danger"></span> </div>
有没有经验丰富的朋友能帮我排查下?是不是BindAttribute的用法有误?或者多选框的命名/值传递哪里没匹配上?
内容的提问来源于stack exchange,提问作者Crumblenautjs
相关产品推荐
相关产品推荐

