데이터베이스의 ADO.NET 모델을 만들었습니다. CRUD (엔티티 프레임 워크와 내가 만든 ADO.NET 엔티티 모델 사용)를 사용하여 새 컨트롤러를 만들었습니다.컨트롤러에서 모델 유효성 검사를 바이 패싱합니까?
내 데이터베이스에는 간단한 사용자 테이블이 있습니다. 테이블의 암호 행은 SimpleCrypto (PBKDF2)로 암호화 된 사용자 암호를 보유합니다. 유효성 검사 브라우저에서 jQuery를 함께 작동
[Required]
[DataType(DataType.Password)]
[StringLength(20, MinimumLength = 6)]
[Display(Name = "Password")]
public string Password { get; set; }
: 나는 검증 다음 추가 한 내 ADO.NET의 Users.cs 모델에서
. 하지만 내 컨트롤러에서 암호를 암호화하고 암호 문자열이 길이가 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"로 복사 한 다음 거기에 모든 속성을 설정할 수 있지만이 경우 모델 유효성 검사를 무시할 수있는 쉬운 방법이 없습니까?
EDIT : 모델의 암호 소품 유효성 검사를 제거하면 모든 것이 작동합니다. 그래서 그것은 컨트롤러에서 암호화 때문에 암호를 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/)"합의가 "아니오, 그렇지 않아야합니다"로 표시되어야합니다. –