MVC 페이지를 통해 편집중인 EF 코드 첫 번째 모델이 있는데, [필수] 데이터 주석을 사용하여 항상 false를 반환하는 특정 필드가 있습니다. 유효성 검사를하기 전에 바로 값을 설정하면 여전히 실패합니다.필수 검사기는 항상 false를 반환합니다.
'사용자 이름'속성으로 사용자 이름이나 이메일 주소를 사용하는 경우 구성 할 수있는 사용자 개체 용입니다.
모델 :이 필요한 않다면 내보기에서
public class User {
[DisplayName("User Id")]
public int Id { get; set; }
[Required(ErrorMessage="Username is required")]
public string Username { get; set; }
[UIHint("EmailAddress")]
[Required(ErrorMessage = "Email is required")]
[EmailAddress]
public string Email { get; set; }
}
, 난 단지 Username
편집기를 그리기 해요 :
@if (@ViewBag.LoginMethod == "username") {
@Html.LabelFor(m => m.Username)
@Html.TextBoxFor(m => m.Username, new { autocomplete = "off" })
@Html.ValidationMessageFor(m => m.Username)
}
@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email, new { autocomplete = "off" })
@Html.ValidationMessageFor(m => m.Email)
내 컨트롤러 : 당신이 할 수
[HttpPost]
public ActionResult Create(UserModel viewModel) {
ViewBag.LoginMethod = this.loginMethod.ToString();
var user = new User();
if (this.loginMethod == LoginMethods.Username)
user.Username = viewModel.User.Username;
else
user.Username = viewModel.User.Email;
user.Email = viewModel.User.Email;
user.FirstName = viewModel.User.FirstName;
user.LastName = viewModel.User.LastName;
user.Username = "TEST";
if (TryValidateModel(user) == false) {
this.FlashError("Validation Errors!");
return View(viewModel);
}
throw new Exception("here");
}
User.Username 속성은 login 메서드를 기반으로 설정합니다. 테스트를 위해 유효성 확인 바로 전에 "테스트"로 설정합니다. Username Required 유효성 검사가 false를 반환하고 내보기로 돌아갑니다. 나는 예외에 결코 도착하지 않는다.
아무리 페이지에 사용자 이름 편집기를 렌더링하면 제대로 작동합니다. 클라이언트 측 유효성 검사가 활성화되어 있으므로 값을 입력하지 않고 양식을 제출할 수 없으며 유효합니다. 사용자 이름 값이 검증 된 후에도 여전히 "TEST"인 경우에도 작동합니다.
나는 TryValidateModel
이 올바른 기능이 아니라고 생각하기 시작했습니다. ModelState.IsValid
을 사용하면 동일한 결과가 발생하며 잘못된 필수 오류가 발생합니다.
뷰 모델, 사용자 및 인증 정보가 첨부 된 구성원 개체 (암호, 로그인 타임 스탬프 등)의 두 가지 모델이 있습니다. 나는 당신이 "추가 보안 기능"에 대해 옳다고 생각합니다. 이 시점에서, 나는 새로운 User 객체를 생성하고 FormCollection에서 그것을 수동으로 채우는 것을보고있다. – mattdwen
지연된 응답에 대해 유감스럽게 생각합니다 (아직 인터페이스에 익숙하지 않습니다). 어떻게 된거야? 수동 인구 경로를 따라 간다면 아마도 ModelBinder를 만드는 것이 더 흥미로울 것입니다. 그렇게하면 User 객체를 보내는 모든 곳에서이 코드를 재사용 할 수 있습니다. 또한 ModelBinder에는 수작업으로 도울 수있는 흥미로운 보호 방법이 있습니다. –