문제

사용 중입니다 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; }
}
도움이 되었습니까?

해결책

나는 별도의보기 모델을 사용하여 끝났다 ( 하나의 가능한 해결책 내 질문에서), 그것은 완전히 검증 될 수 있습니다. 해결 방법이며 여전히 올바르게 수행하는 방법을 알고 싶습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top