ASP.NET MVC3中远程验证的有关问题
1:首先有个User模型,
- C# code
/// <summary> /// 用户的Email地址 /// </summary> [Required(ErrorMessage = "Email必填")] [Display(Name = "Email")] [DataType(DataType.EmailAddress, ErrorMessage = "你的邮箱格式不对。\n正确的邮箱格式为'85167538@qq.com'")] [Remote("CheckEmailExists", "Account", ErrorMessage = "此邮箱己存在")] public string Email { get; set; }
2:验证的代码:
- C# code
/// <summary> /// 验证邮箱的唯一性 /// </summary> /// <param name="email"></param> /// <returns></returns> public JsonResult CheckEmailExists(string email) { BlogEnt db = new BlogEnt(); var result = from e in db.Users where e.Email == email.ToLower().Trim() select e; return Json(result.ToList().Count == 0, JsonRequestBehavior.AllowGet); }
,,,,这样,就实现了远程验证,确保数据的唯一性。
因为我的前提是一旦用户注册了这个邮箱,那它以后就一直用这个邮箱不能再修改了。
所以现在碰到一个问题,在就是用户在修改用户资料时,还是会验证这个Email,报错”此邮箱己存在“。
修改用户资料的Controller:
- C# code
public ActionResult EditUserInfo(int id) { User user = db.Users.Find(id); if (user == null ||Convert.ToInt32(Session["userid"])!=id) { return RedirectToAction("Index"); } else { ViewBag.skinid = db.Skins.OrderBy(a => a.SkinID).ToList(); return View(user); } } [HttpPost] public ActionResult EditUserInfo(User user ) { try { var u = db.Users.Find(user.UserID); UpdateModel(u); db.SaveChanges(); return RedirectToAction("Index"); } catch { ModelState.AddModelError("", "修改失败,请查看详细错误信息。"); } return View(user); }
前台View是用的强类型。
所以在修改用户资料这个action要怎么跳过这个验证方法?
------解决方案--------------------
给个标志处理吧
public JsonResult CheckEmailExists(string email ,int state) //state=1为增加 2为修改
{
if(state==1){
BlogEnt db = new BlogEnt();
var result = from e in db.Users
where e.Email == email.ToLower().Trim()
select e;
return Json(result.ToList().Count == 0, JsonRequestBehavior.AllowGet);
}
}
------解决方案--------------------
要不然还是手写验证吧。不需要用这样子的验证了。
------解决方案--------------------
ModelState.Romove("email");