컨트롤러 메서드 내에서 수정 된 ViewModel을 재 검증 하시겠습니까?
편집 -우리는 MVC4 Dev Preview를 사용하고 있습니다 ....
FishingTrip
클래스에 대한 편집 페이지를 구현하고 있습니다. FishingTrip
간단한 Crew
개체 (예 : FishingTripID, CrewID, CrewPosition) 의 자식 컬렉션을 포함합니다 .
컬렉션 에서 추가, 편집 및 삭제 하는 데 Jarrett Meyer의 접근 방식 을 사용 하고 Crew
있습니다. 의 속성 Crew
이 모두 라는 것을 지정하기 위해 눈에 잘 띄지 않는 유효성 검사를 사용하고 있습니다 Required
.
내 문제 : 목록에서 항목을 논리적으로 삭제할 때 (Jarrett의 방법에 따라) 해당 항목이 확인되는 것을 원하지 않습니다.
클라이언트 측에서 "removeRow"메서드를 성공적으로 조정하여 논리적으로 삭제 된 항목에 대해 눈에 띄지 않는 유효성 검사를 비활성화하여 빈 필드가 포함 된 항목이 있어도 양식이 게시되도록했습니다.
내 컨트롤러 메서드 [HttpPost] Edit
에서 ModelState.IsValid
(예상대로-빈 필드를 포함하는 논리적으로 삭제 된 항목 때문에) false로 시작합니다. 따라서 내 ViewModel에서 해당 항목을 제거합니다 ....하지만 ModelState.IsValid
여전히 false입니다.
요약하면 컨트롤러 메서드 내에서 ViewModel을 수정하여 문제가되는 항목을 제거한 다음 일종의 "재 검증"을 호출 ModelState.IsValid
하고 true로 표시하고 싶습니다 .
어떤 아이디어?
문제가되는 항목을 제거한 후에는 ModelState를 지우고 다음과 같이 다시 확인합니다.
ModelState.Clear();
TryValidateModel(crew); // assumes the model being passed is named "crew"
참고 : TryValidateModel
이 메서드는 모델의 중첩 된 개체를 확인하지 않으므로 메서드를 사용할 때주의해야 합니다 (@Merenzo에서 언급 함).
게임에 늦었지만 여전히 : 모델 을 약간 조정 한 후 (더 정확하게는 중첩 된 컬렉션의 항목에 대해) 모델의 유효성을 검사하는 방법을 찾고 있었지만 TryValidateModel
작동하지 않았습니다. 중첩 된 개체를 처리합니다.
마지막으로 사용자 지정 모델 바인더로 해결했습니다.
public class MyItemModelBinder : DefaultModelBinder
{
protected override void OnModelUpdated(
ControllerContext controllerContext,
ModelBindingContext bindingContext)
{
if (bindingContext.ModelType == typeof(MyItemModel))
{
MyItemModel item = (MyItemModel)bindingContext.Model;
//do required tweaks on model here
//(I needed to load some additional data from DB)
}
//validation code will be called here, in OnModelUpdated implementation
base.OnModelUpdated(controllerContext, bindingContext);
}
}
모델 클래스 :
[ModelBinder(typeof(MyItemModelBinder))]
public class MyItemModel : IValidatableObject
{
//...
}
'programing' 카테고리의 다른 글
Xcode에 구성을 추가하는 방법은 무엇입니까? (0) | 2021.01.17 |
---|---|
'\ r'이스케이프 시퀀스의 사용은 무엇입니까? (0) | 2021.01.17 |
한 지점에서 다른 지점으로 푸시하고 결제하는 방법은 무엇입니까? (0) | 2021.01.17 |
실행 가능한 인터페이스를 구현하여 생성 된 스레드를 중지하는 방법은 무엇입니까? (0) | 2021.01.17 |
.vim ~ / .vimrc를 github (일명 도트 파일)에 추가 (0) | 2021.01.17 |