validationmessage net mvc example editar data asp asp.net-mvc modelbinders

example - ASP.NET MVC-Combinación de modelos personalizados y predeterminados



validation data annotations in asp net mvc (3)

Creo que habría registrado dos carpetas de modelos personalizados diferentes, una para Order y otra para Item, y dejar que la carpeta de modelo predeterminada maneje Range y IssueForm.

Tengo un tipo:

public class IssueForm { Order Order {get; set;} Item Item {get; set;} Range Range {get; set;} }

Creé un encuadernador de modelo personalizado debido a los requisitos en Orden y Artículo, pero el Rango aún podría usar el Encuadernador de modelo predeterminado.

¿Hay alguna manera desde dentro de mi carpeta de modelo personalizado para llamar al encuadernador de modelo predeterminado para devolver un objeto de rango? Creo que solo tengo que configurar ModelBindingContext correctamente, pero no sé cómo.

EDITAR

Al mirar el primer comentario y respuesta, parece que heredar del encuadernador de modelo predeterminado podría ser útil.

Para agregar más detalles para mi configuración hasta ahora, tengo:

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 } }

Esta podría ser una manera estúpida de hacerlo ... esta es mi primera carpeta modelo. Solo señalando mi implementación actual.

EDIT # 2

Entonces, las respuestas para anular BindProperty funcionarán si puedo engancharme como un método "I''m all done binding" y llamar al método Factory con las propiedades.

Creo que realmente debería mirar la implementación DefaultModelBinder y dejar de ser estúpido.


Pruebe algo como esto:

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); } }


anula BindProperty del DefaultModelBinder:

public class CustomModelBinder:DefaultModelBinder { protected override void BindProperty( ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor ) { if (propertyDescriptor.PropertyType == typeof(Range)) { base.BindProperty(controllerContext, bindingContext, propertyDescriptor); } // bind the other properties here } }