Asp.Net MVC 5 ModelState

时间:2014-08-09 20:28:47

标签: asp.net-mvc asp.net-mvc-5

我的项目中有一个简单的消息系统。我有名称属性,如果我的用户在角色管理员,我得到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);
}

1 个答案:

答案 0 :(得分:2)

要扩展GSerg注释,DefaultModelBinder会添加错误,因为属性Name是必需的,但为空。在绑定过程之后设置Name属性不会删除错误,因此它仍然无效。您的选择包括

  1. Name属性添加到视图中,以便回发
  2. 删除特定错误(即 ModelState["Name"].Errors.Clear();)当您设置名称
  3. 清除所有错误并重新验证(即ModelState.Clear(); TryValidateModel(crew);