원래 모델을 포함하는 숨겨진 값을 기반으로 적절한 모델 하위 형식을 반환하는 데 사용하는 사용자 지정 모델 바인더가 있습니다.다형성 사용자 지정 모델 바인더가 값이있는 모델을 채우지 않음
예를 들어, 내보기 (EditorTemplate)에서 내가 가진 :
@model MyWebApp.Models.TruckModel
@Html.Hidden("ModelType", Model.GetType())
@Html.EditorFor(m => m.CabSize)
그런 다음 내 사용자 정의 모델 바인더, 내가 가진 다음 typeValue
및 type
변수로 설정지고
protected override object CreateModel(ControllerContext controllerContext,
ModelBindingContext bindingContext, Type modelType)
{
var typeValue = bindingContext.ValueProvider
.GetValue(bindingContext.ModelName + ".ModelType");
var type = Type.GetType((string)typeValue.ConvertTo(typeof(string)), true);
var model = Activator.CreateInstance(type);
bindingContext.ModelMetadata = ModelMetadataProviders.Current
.GetMetadataForType(() => model, type);
return model;
}
적절한 값 (유형은 TruckModel
)이지만 GetMetadataForType
을 수행 한 후에도 model
은 여전히 널 (null)/기본값으로 채워집니다.
몇 개의 게시물 (here 및 here)을 체크 아웃했는데 여기에 설명 된대로 모든 것을 수행하고있는 것처럼 보입니다. 그러나 여전히 저에게는 효과가 없습니다.
이 항목에 대한 내 previous post을 참조하여보기/모델 설정에 대한 자세한 내용을 확인할 수 있습니다.
이 단계에서 기본값을 기대할 것입니다. GetPropertyValue를 호출 한 후에 모델에 실제로 뷰의 값이 채워진 후에 만 해당 메서드를 단계별로 실행 했습니까? – sydneyos
@sydneyos - 네 말이 맞아,이 시점에서 값이 설정되지 않아야한다. 나는 그것이 내 컨트롤러 (관련없는 예외'ArgumentNullException',하지만 난 관련 있다고 생각하기 전에 그것을 던져지고 예외를 볼 수 없었습니다.) 이 문제를 해결하고 나면 컨트롤러로 넘어갔습니다. 당신이 말했듯이,이 시점에서 제 모델이 채워졌습니다. 답변으로 게시 할 수 있다면 받아 들일 것입니다. 감사. –