ASP.NET MVC视图下拉列表绑定控制器异常:员工提交数据为空
问题原因
表单提交的是员工ID字符串,但你的AddAssignmentViewModel中assignee是Employee类型。ASP.NET MVC默认模型绑定无法将字符串直接实例化为Employee对象,导致提交后addAssignmentRequest.assignee始终为空。
修复方案
1. 修改视图模型
添加用于接收员工ID的属性,保留原assignee属性(可选,用于视图回显等场景):
public class AddAssignmentViewModel { public string title { get; set; } public string description { get; set; } // 新增属性接收下拉框提交的员工ID public Guid assigneeId { get; set; } // 保留原属性(如需在视图中显示员工信息) public Employee assignee { get; set; } public DateTime dueDate { get; set; } }
2. 更新视图下拉框
将asp-for指向新增的assigneeId属性:
<div class="mb-3"> <label for="" class="form-label">Assignee</label> <select asp-for="assigneeId" class="form-control" asp-items="ViewBag.assignee"></select> </div>
3. 修改控制器Post方法
通过提交的assigneeId从数据库查询对应员工,再赋值给Assignment的assignee:
[HttpPost] public async Task<IActionResult> Add(AddAssignmentViewModel addAssignmentRequest) { // 根据ID从数据库获取员工实例 var assignee = await dataContext.Employees.FindAsync(addAssignmentRequest.assigneeId); var assignment = new Assignment() { taskID = Guid.NewGuid(), title = addAssignmentRequest.title, description = addAssignmentRequest.description, assignee = assignee, dueDate = addAssignmentRequest.dueDate, }; await dataContext.Assignments.AddAsync(assignment); await dataContext.SaveChangesAsync(); return RedirectToAction("Index"); }
额外提示
- 若
Employee表主键不是Guid类型,需对应修改assigneeId的类型(如int)。 - 可以给
assigneeId添加[Required]注解强制用户选择员工:[Required(ErrorMessage = "请选择员工")] public Guid assigneeId { get; set; }
内容的提问来源于stack exchange,提问作者jos
相关产品推荐
相关产品推荐

