2017-03-26 2 views
1

내 웹 사이트가 나타내는 개체에 사용하고있는 뷰 모델이 있습니다. Student이라고합시다.오버라이드보기 모델의 필수 속성

추가, 세부 정보 및 편집보기에 동일한보기 모델을 사용하여 응용 프로그램 혼란을 최소화 할 수있어서 기뻤습니다.

그러나 일부 요소는 비밀번호와 같은 편집보기에서 편집 할 수 없습니다. 그래서 나는 이것을보기에서 제거했다.

그러나 이제 ModelState.IsValid은 다시 게시에 대해 false를보고합니다.

이러한 모든보기에 동일한보기를 사용하는 방법이 있지만 편집보기의 필수 상태를 대체하는 방법이 있습니까?

참고 : 숨겨진 필드를 사용할 수 있음을 알고 있습니다. 그러나 나는 클라이언트와 같은 비밀 번호와 같은 데이터를 보내는 편안한되지 않습니다. 나는 단지 그것을 여기에 드러내지 않는 것을 선호 할뿐입니다.

+6

** 특정보기 **보기 모델을 만드는 것을 고려 했습니까? 필요에 따라 상속을 사용하십시오. – Shyju

+0

속성은 요청한 내용에 대해 융통성이없는 컴파일 시간 메타 데이터입니다. 이미 제공된 제안 중 하나에 추가하여 공통 기본보기 모델을 만들고 가상 속성을 갖습니다. 뷰 특정 뷰 모델에서 필요한 특성을 대체하고 필요에 따라 필수 속성을 적용하십시오. – Nkosi

+0

@Shyju : ​​그렇습니다. 나는 그것에 대해 생각해 보았습니다. 더 간단한 것이 없다면 그 접근법을 취할 수 있습니다. 그러나 필요한 모델의 수를 최소화하는 것에 만족했습니다. –

답변

2

다른 사람들이 지적했듯이,이 상황은 일반적으로 다른보기 모델 클래스를 필요로합니다. 그리고 이것은 상속을 사용하여 더욱 간결하게 수행 할 수 있습니다.

하지만 다른 옵션이 있습니다. 완벽하지는 않지만 내가 찾고있는 것에 더 가깝습니다.

양식이 다시 게시되면 오류는 ModelState에 저장됩니다. 문제가되지 않는 오류가 있음을 알고 있다면이를 해결할 수 있습니다. 모든 오류를 지우면 ModelState.IsValidfalse에서 true으로 변경됩니다.

public ActionResult Edit(TrainerModel model) 
{ 
    ModelState[nameof(model.Email)]?.Errors?.Clear(); 
    ModelState[nameof(model.Password)]?.Errors?.Clear(); 

    if (ModelState.IsValid) 
    { 
     // 
    } 
    return View(model); 
} 
+1

하지만 클라이언트 쪽 유효성 검사를 우회합니까? – Nkosi

+0

@ Nkosi : 필자는이 입력 필드를 내보기에서 제거 했으므로 문제가되지 않습니다. 보기에 여전히이 필드가 있다면 클라이언트 측 유효성 검사는 여전히 불평 할 것입니다. –