答案 0 :(得分:1)
发生错误是因为在POST方法中,您返回视图,但没有将值重新分配给ViewBag.Teams
(正如您在GET方法中所做的那样),因此它为null。但是,您的下拉列表正在尝试绑定到无法完成的集合(<select>
元素仅回发其所选选项的值)并且绑定将始终失败。
您的代码中不清楚您使用Teams
,因为它在您的POST方法中未提及,但您需要将视图模型更改为:
public class RegisterViewModel
{
[Display(Name = "Assigned Teams")]
[Required(ErrorMessage = "Please select a team")]
public string SelectedTeam { get; set; }
public SelectList TeamsList { get; set; }
....
}
然后在GET方法中,初始化模型并将其返回
RegisterViewModel model = new RegisterViewModel();
model.TeamsList = new SelectList(_db.Teams, "Name", "Name");
return View(model);
并在视图中
@Html.LabelFor(m => m.Teams, new { @class = "col-md-2 control-label" })
@Html.DropDownListFor(m => m.SelectedTeam, Model.TeamsList, "- Please Select a Team -", new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Teams)
并且在POST方法中,如果由于ModelState
无效而需要返回视图,则在返回视图之前重新分配SelectList
[HttpPost]
public async Task<ActionResult> Create(RegisterViewModel model, params string[] selectedRoles)
{
....
// if you need to return the view, then
model.TeamsList = new SelectList(_db.Teams, "Name", "Name");
return View(model);
}
附注:由于您使用的是视图模型,因此它还应包含用于选择角色的属性,并从POST方法中删除params string[] selectedRoles
参数。