ASP.NET MVC2 RTM에서 열거 가능한 속성을 사용한 모델 검증
-
21-09-2019 - |
문제
사용 중입니다 DataAnnotations
내 모델 객체를 검증하는 속성. 내 모델 클래스는 이것과 비슷해 보입니다.
public class MyModel
{
[Required]
public string Title { get; set; }
[Required(ErrorMessage = "At least one editor is required.")]
public List<User> Editors { get; set; }
}
public class User
{
public int Id { get; set; }
[Required]
public string FullName { get; set; }
[Required]
[DataType(DataType.Email)]
public string Email { get; set; }
}
내 컨트롤러 동작은 다음과 같습니다.
public ActionResult NewItem(MyModel data)
{
if (!this.Model.IsValid)
{
// invalid processing
}
// valid processing
}
사용자는 다음과 같은 양식을 가진보기가 제공됩니다.
- 사용자가 사용자 이름을 입력하는 더미 이름이있는 텍스트 상자. 입력하는 각 사용자마다 Ajax와 함께 클라이언트 스크립트가 있습니다.
<input type="hidden" name="Editors[0].Id" value="userId" />
입력 한 각 사용자에 대해 (열거 인덱스는 항상 여기에 작성된대로 0이 아닙니다), 기본 모델 바인더는 문제없이 양식을 소비하고 바인딩 할 수 있습니다. - 사용자가 제목을 입력하는 텍스트 상자
내가 사용하기 때문에 ASP.NET MVC 2 RTM 입력 유효성 검사 대신 모델 유효성 검사를 수행합니다. 유효성 검사 오류를 피하는 방법을 모릅니다. 그리고 사용자가 제공하기 때문에 User.Id
, 전체 User
객체 인스턴스가 검증되고 있습니다. 다른 속성의 검증을 배제하는 방법을 알고있는 한 나를 괴롭히지 않습니다.
문제는 내가 사용해야한다는 것입니다 BindAttribute
내 컨트롤러 동작에. 나는 흰색 또는 검은 색 목록을 제공해야합니다. 흰색 목록을 제공하는 것이 항상 더 나은 연습입니다. 또한 더 미래의 증거입니다.
문제
내 양식은 잘 작동하지만 사용자에 대한 검증 오류가 발생합니다. FullName
그리고 Email
제공되지 않기 때문에 속성. 또한 이메일이 개인 연락처 데이터이고 사용자간에 공유되지 않기 때문에 사용자가 사용자 데이터를 입력 할 때 AJAX를 통해 클라이언트에게 공급해서는 안됩니다.
단일 사용자 참조 만 있으면 MyModel
나는 쓸 것이다
[Bind(Include = "Title, Editor.Id")]
그러나 나는 그들을 열거하고 있습니다. 어떻게 제공합니까? Bind
내 모델과 함께 작동하는 White List?
하나의 가능한 해결책
별도의보기 모델을 만들 수 있습니다 User
MyModel 객체에 들어가기 위해. 실제 검증 속성을 넣고 필요없는 속성을 생략합니다.
public class MyModelUser
{
[Required]
public int Id { get; set; }
}
해결책
나는 별도의보기 모델을 사용하여 끝났다 ( 하나의 가능한 해결책 내 질문에서), 그것은 완전히 검증 될 수 있습니다. 해결 방법이며 여전히 올바르게 수행하는 방법을 알고 싶습니다.