mvc验证属性 [Remote] 验证用户名后,再用户需要修改用户名的时候也要验证是否存在,但是只当修改后的用户名不为当前用户名才应该提示。
control代码为:
public JsonResult ExitesUserName()
{
string uname = Request.Params["uname"];
var user = db.User_tb.Where(x => x.uname == uname).FirstOrDefault();
return user == null ? Json(true, JsonRequestBehavior.AllowGet) : Json("用户名已存在", JsonRequestBehavior.AllowGet);
}
但是如果这样写的话,如果后期有修改用户信息的需求,就会很麻烦,因为用户可能只想修改其他信息而不想修改用户名,此时这个用户名就会一直提示存在,用户还必须要修改??
所以就需要判断当前用户是注册还是修改,我在这里用到的方法是判断 当前页面是否存在此用户的 “id” 如果有则是修改信息且修改后的用户名不存在则不提示,
public ActionResult UserInfo(int id)
{
this.TempData["id"] = id.ToString();
var usermodel = db.User_tb.FirstOrDefault(x=>x.id==id);
return View(usermodel);
}
public ActionResult UpdateUserName(User_tb model)
{
var uid = db.User_tb.FirstOrDefault(x=>x.id==model.id);
if (uid==null)
{
return Content("用户不存在");
}
var usermodel = db.User_tb.FirstOrDefault(x=>x.id==model.id);
usermodel.uname = model.uname;
usermodel.email = model.email;
db.Entry<User_tb>(usermodel).State = System.Data.EntityState.Modified;
db.Configuration.ValidateOnSaveEnabled = false;//关闭实体验证有效性
db.SaveChanges();
return RedirectToAction("Index");
}
//[HttpGet]
public JsonResult ExitesUserName()
{
string id = this.TempData["id"] as string;//这里的TempData["id"]是UserInfo中定义的,而且使用[HttpGet]后,这个值获取不到,难道[HttpGet]禁止TempData????
string userName = Request.Params["uname"];
if (string.IsNullOrWhiteSpace(id))//注册页面没有用户id
{
var user = db.User_tb.Where(x => x.uname == userName).FirstOrDefault();
return user == null ? Json(true, JsonRequestBehavior.AllowGet) : Json("用户名已存在", JsonRequestBehavior.AllowGet);
}
else//修改
{
if (db.User_tb.Find(int.Parse(id)).uname == userName)//若当前修改的用户名与原先一致,不提示
{
return Json(true, JsonRequestBehavior.AllowGet);
}
else//否则提示修改后的用户名已存在
{
return Json(false, JsonRequestBehavior.AllowGet);
}
}
}