我已經創建了我的數據庫的ADO.NET模型。 創建一個帶有CRUD的新控制器(實體框架並使用我創建的ADO.NET實體模型)。繞過控制器中的模型驗證?
在我的數據庫中有一個簡單的用戶表。表中的密碼行將保存用SimpleCrypto(PBKDF2)加密的用戶密碼。
在我的ADO.NET Users.cs模型我已經添加以下驗證:
[Required]
[DataType(DataType.Password)]
[StringLength(20, MinimumLength = 6)]
[Display(Name = "Password")]
public string Password { get; set; }
這與jQuery與驗證的瀏覽器。 但在我的控制器中,我正在加密密碼,然後密碼字符串的長度將超過20個字符。
var crypto = new SimpleCrypto.PBKDF2();
var encryptedPass = crypto.Compute(user.Password);
user.Password = encryptedPass;
user.PasswordSalt = crypto.Salt;
_db.Users.Add(user);
_db.SaveChanges();
這使我和「驗證失敗的一個或多個實體。」 - 錯誤。
我可以將用戶複製到一個「var newUser」,然後設置所有屬性,但在這種情況下沒有更簡單的方法繞過模型驗證嗎?
編輯:如果我刪除模型中的密碼道具驗證然後一切正常。所以這是驗證,給我的錯誤,因爲我把密碼從6-20長度字符改爲+100長度字符,因爲控制器中的加密。
編輯:完成控制器部分插入到這個問題。
[HttpPost]
public ActionResult Create(Users user)
{
if (!ModelState.IsValid)
{
return View();
}
if (_db.Users.FirstOrDefault(u => u.Email == user.Email) != null)
{
ModelState.AddModelError("", "User already exists in database!");
return View();
}
var crypto = new SimpleCrypto.PBKDF2();
var encryptedPass = crypto.Compute(user.Password);
user.Password = encryptedPass;
user.PasswordSalt = crypto.Salt;
_db.Users.Add(user);
_db.SaveChanges();
return RedirectToAction("Index", "User");
}
我編輯了自己的冠軍。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –