【发布时间】:2018-02-10 10:14:26
【问题描述】:
当我尝试回发绑定模型以进行更新时出现此错误:
参数字典包含“EtlGui.控制器.用户控制器'。可选参数必须是引用类型、可空类型或声明为可选参数。 参数名称:参数
这是我的操作:
public ActionResult EditUser(int id)
{
User user = Database.Session.Load<User>(id);
if (user == null)
return HttpNotFound();
return View(new UsersEdit
{
username = user.username,
email = user.email,
Roles = Database.Session.Query<Role>().AsEnumerable().Select(role => new RoleCheckbox
{
id = role.id,
ischecked = user.Roles.Contains(role),
name = role.name
}).ToList()
});
}
[HttpPost,ValidateAntiForgeryToken]
public ActionResult EditUser(int id,UsersEdit edit )
{
var user = Database.Session.Load<User>(id);
if (user == null)
return HttpNotFound();
syncRole(edit.Roles,user.Roles);
if (Database.Session.Query<User>().Any(u => u.username == edit.username && u.id != id))
ModelState.AddModelError("username","username must be unique");
if (!ModelState.IsValid)
return View(edit);
user.username = edit.username;
user.email = edit.email;
Database.Session.Update(user);
return RedirectToAction("UsersServices");
}
我的看法:
@model EtlGui.ViewModels.UsersEdit
....
<h2 class="heading">Edit User @Model.username</h2>
<form action="@Url.Action("EditUser")" method="POST" class="login">
@Html.AntiForgeryToken()
@Html.ValidationSummary()
....
<div class="col-lg-3 label">user name :</div>
<div class="col-lg-4">
<input type="text" name="username" class="form-control" value="@Model.username">
</div>
<div class="col-lg-3 label">email :</div>
<div class="col-lg-4">
<input type="text" name="email" class="form-control" value="@Model.email">
</div>
<div class="col-lg-3 label">password :</div>
<div class="col-lg-4">
<input type="password" name="password" class="form-control">
</div>
<h1 class="heading">select Roles</h1>
@Html.Partial("_RoleEditor", Model.Roles)
<button type="submit" class="btn darkblue-btn">Update User</button>
</form>
【问题讨论】:
-
因为您没有在表单中提交
id的值(请花一些时间正确格式化您的代码,以便其可读) -
不应该在那里吗?因为我已经绑定在 GET 请求中
-
如果您生成了正确的视图(使用
HtmlHelper方法,包括@using(Html.BeginForm()) { ...(但从您的代码中可以看出,您尽一切可能确保模型绑定不起作用)) -
谢谢..它有效!!
标签: asp.net-mvc