을 한 바인딩.ASP.NET MVC 혼합 사용자 정의 및 기본 모델은 내가 유형은
기본 모델 바인더를 호출하여 Range 개체를 반환하는 방법이 있습니까? 난 그냥 ModelBindingContext 제대로 설치해야한다고 생각하지만, 어떻게 해야할지 모르겠다. 첫 번째 주석과 답변을 보면 편집
는 - 그것은 도움이 될 수있는 기본 모델 바인더에서 상속처럼 보인다.
지금까지 내가 가진 내 설치에 대한 더 많은 세부 사항을 추가하려면 :public IssueFormModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
Order = //code to pull the OrderNumber from the context and create an Order
Item = //code to pull the ItemNumber from the context and create an Item
IssueForm form = IssueFormFactory.Create(Order, Item);
form.Range = // ** I'd like to replace my code with a call to the default binder **
return form
}
}
이것은 그 일의 바보 같은 방법이 될 수 있습니다 ... 이것은 내 첫 번째 모델 바인더입니다. 내 현재 구현을 지적하십시오. 그래서 답변
편집 # 2
내가 같은 "나는 모든 바인딩 끝났어요"방법에 후크와 속성을 사용하여 팩토리 메소드를 호출 할 수있는 경우 BindProperty가 작동 오버라이드 (override)합니다.
나는 DefaultModelBinder 구현을 살펴보고 바보 같은 짓을 그만 두어야한다고 생각한다. DefaultModelBinder에서
public class CustomModelBinder : DefaultModelBinder {
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor) {
if(propertyDescriptor.Name == "Order") {
...
return;
}
if(propertyDescriptor.Name == "Item") {
...
return;
}
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
가장 세련된 솔루션인지 확실하지 않지만 IModelBinder를 구현하는 대신 DefaultModelBinder에서 사용자 정의 모델 바인더를 파생시킬 수 있습니까? 그런 다음 BindModel을 재정의 할 때 책임을 DefaultModelBinder로 전달합니다. 그렇지 않으면 사용자 정의 바인딩을 사용하십시오. –
Yah, IModelBinder 및 DefaultModelBinder에서 일부 모델 바인더가 표시됩니다. DefaultModelBinder에는 BindModel 메서드에서 호출한다고 가정하는 몇 가지 추가 메서드가 있으므로 필요에 더 집중할 수 있습니까? – anonymous
ModelBinder 및 코드 입력 처리 및 유효성 검사를 수동으로 무시하기로 결정했습니다. 이제는 일관되고, 투명하며, 현재와 미래의 필요에 맞게 조정할 수 있습니다. – User