我的项目中有一个简单的消息系统。我有名称属性,如果我的用户在角色管理员,我得到User.Identity.Name的名称,而不是从View获取它,因为我使名称属性需要,当管理员试图发布一些东西时,ModelState无效。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Message,Name,Subject,Receiver")] Talep talep){
if (User.IsInRole("Admin")){
talep.Name = User.Identity.Name;
}
if (ModelState.IsValid){
talep.UploadDate = DateTime.Now;
var usrId = Request.Form["UserId"];
talep.Receiver = db.Users.Find(usrId).UserName;
talep.UserId = User.Identity.GetUserId().ToString();
db.Talep.Add(talep);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(talep);
}
答案 0 :(得分:2)
要扩展GSerg注释,DefaultModelBinder
会添加错误,因为属性Name
是必需的,但为空。在绑定过程之后设置Name
属性不会删除错误,因此它仍然无效。您的选择包括
Name
属性添加到视图中,以便回发ModelState["Name"].Errors.Clear();
)当您设置名称ModelState.Clear();
TryValidateModel(crew);
)