2017-04-15 8 views
1

기본적으로 내가 알아 내려고하는 것은 뷰에서 두 필드 중 적어도 하나를 채우는 방법입니다.한 필드 또는 다른 필드 필요

내보기에는 ISBN 및 ISBN13이라는 두 개의 텍스트 필드가 있습니다. 어느 쪽이 채워지는지는 사용자가 채우는 것이 중요하지 않습니다.

여기서해야 할 일은 사용자 정의 유효성 검사기를 작성하는 것으로 기대할 수 있을지 모르겠으므로 먼저 물어볼 것이라고 생각했습니다. 나는 약간의 코드를 포함 시켰을 것이다. 그러나이 설명이 단지 두 개의 간단한 필드이므로이 설명이 더 좋을 것이라고 생각했다.

+2

원하는 답변을 얻으려면 여기에 게시 된 답변을 약간 변경하면됩니다. http://stackoverflow.com/questions/11959431/how-to-create-a-custom-validation-attribute?rq=1 – Shyju

+0

사용자 정의 코드는 여기에서 절대적으로 적합합니다. 사실 사용자 정의 유효성 검사기가 필요하지 않습니다. 이것은 UI 영역뿐 아니라 핵심 도메인 비즈니스 로직입니다. 유효하지 않은 상태의 엔티티를 생성하는 것은 불가능합니다 (예를 들어 구성에 throwing-code를 넣어 유효성을 검사 할 수 있습니다. UI의 별도 자바 스크립트 유효성 검사는 사용자에게 즉각적인 피드백을 제공하는 데 도움이됩니다. –

답변

1

컨트롤러에 변경 사항을 데이터베이스에 저장하기 직전에 생성 섹션에서 이와 같은 것을 추가하는 것을 상상해보십시오.

int countISBN = Product.ISBN.Count() + Product.ISBN13.Count(); 
if (countISBN <= 9) 
{ 
    // Add in an error message. 
    return View(); 
} 

이 작업은 두 필드의 문자 수를 합산하여 계산합니다. 합이 10보다 작 으면 오류가 발생합니다.

1

사용 MVC Foolproof NuGet 패키지와는 당신이 RequiredIf 속성을 아래와 같이 사용할 수 있습니다

[RequiredIf("ISBN==\"\"")] // backslash is used for escaping the quotes 
public string ISBN13 { get; set; } 

[RequiredIf("ISBN13==\"\"")] 
public string ISBN { get; set; } 
2

당신은 당신의 컨트롤러 액션에서 수동 유효성 검사를 수행 할 수 있습니다. AddModelError 메서드는 유효성 검사 스택을 사용하는 데 도움이됩니다.

[HttpPost] 
public ActionResult Edit(EditModel model) 
{ 
    if (string.IsNullOrEmpty(model.ISBN) && string.IsNullOrEmpty(model.ISBN13)) 
    { 
     var validationMessage = "Please provide ISBN or ISBN13."; 
     this.ModelState.AddModelError("ISBN", validationMessage); 
     this.ModelState.AddModelError("ISBN13", validationMessage); 
    } 

    if (!string.IsNullOrEmpty(model.ISBN) && !string.IsNullOrEmpty(model.ISBN13)) 
    { 
     var validationMessage = "Please provide either the ISBN or the ISBN13."; 
     this.ModelState.AddModelError("ISBN", validationMessage); 
     this.ModelState.AddModelError("ISBN13", validationMessage); 
    } 

    if (this.ModelState.IsValid) 
    { 
     // do something with the model 
    } 

    return this.View(model); 
} 

일부 사람들은 쿼리 유효성 검사를 수행하는 것이 컨트롤러의 책임이 아니라고 말할 수도 있습니다. 컨트롤러의 책임은 웹 요청을 도메인 요청에 적용하는 것입니다. 따라서 컨트롤러에는 유효성 검사 로직이있을 수 있습니다. 도메인/비즈니스 계층이없는 경우이 고려 사항은 의미가 없습니다.