首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

ASP.NET MVC3中远程验证的有关问题

2012-05-01 
ASP.NET MVC3中远程验证的问题1:首先有个User模型,C# code/// summary/// 用户的Email地址/// /summary

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");

热点排行