当下拉列表位于视图模型上时,模型状态始终无效
本文关键字:模型 无效 状态 下拉列表 于视图 视图 | 更新日期: 2023-09-27 18:35:45
我有这个视图模型:
public class CreateUserModel {
public int StateId { get; set; }
public IEnumerable<SelectListItem> States { get; set; }
}
以下是我的观点:
@Html.DropDownListFor(model => model.StateId, Model.States, "--select state--")
这是我的控制器:
public ActionResult Create()
{
var model= new CreateUserModel();
model.States = new SelectList(_context.States.ToList(), "Id", "Name");
return View(model);
}
[HttpPost]
public ActionResult Create(CreateUserModel model)
{
if (ModelState.IsValid)
{
_context.Users.Add(new User()
{
StateId = model.StateId
});
_context.SaveChanges();
return RedirectToAction("Index");
}
else
{
return View(model);
}
}
此错误使模型状态无效:
System.InvalidOperationException:从类型转换的参数 键入"System.Web.Mvc.SelectListItem"的"System.String"失败,因为 没有类型转换器可以在这些类型之间进行转换。
编辑以包括我的完整视图:
@model AgreementsAndAwardsDB.ViewModels.CreateUserModel
<!DOCTYPE html>
<html>
<head>
<script src="~/Scripts/jquery-1.8.3.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
</head>
<body class="createPage">
@using (Html.BeginForm("Create", "Accounts", Model, FormMethod.Post))
{
@Html.DropDownList("StateId", Model.States)
<input type="submit" />
}
</body>
</html>
使用以下行将模型作为路由值传递给表单操作:
@using (Html.BeginForm("Create", "Accounts", Model, FormMethod.Post))
由于无法以良好的方式解析查询字符串的IEnumerable<SelectListItem> States
,因此表单操作将被Accounts/Create?StateId=0&States=System.Web.Mvc.SelectList
,模型绑定器将尝试将字符串"System.Web.Mvc.SelectList"绑定到IEnumerable<>
,这就是您的代码不起作用的原因。
你可能没问题
@using (Html.BeginForm())
,但是如果要指定操作,控制器和方法,请转到
@using (Html.BeginForm("Create", "Accounts", FormMethod.Post))