2009-12-22 10 views
7

Mi modelo es como estoCarpeta de encargo de modelo para el modelo situado en plena

public class MyModel 
{ 
    string ID {get;set;} 
    string Title {get;set;} 
    MyOtherModel Meta {get;set;} 
} 

Cómo definir ligante modelo personalizado para el tipo (MyOtherModel) así que cuando enlazador predeterminado une MyModel que llama ligante modelo personalizado para la propiedad 'Meta'. Me he registrado en la aplicación empezar así:

ModelBinders.Binders[typeof(MyOtherModel)] = new MyCustomBinder(); 

pero esto no funciona. ¿Alguna idea o algún artículo bueno con más información sobre carpetas modelo?

+0

¿Qué no está funcionando? ¿Has intentado poner un punto de interrupción en tu carpeta personalizada para ver si la carpeta se ha asociado correctamente? Normalmente utilizo la sintaxis ModelBinders.Bonders.Add (typeof (MyOtherModel), new MyCustomBinder()) – Mac

Respuesta

1

Hay un artículo sobre las colecciones que toca un poco el complejo cosas de tipo de mapeo:

Collections and a bit about complex types

En otra parte de este artículo podría darle algunos consejos útiles:

http://odetocode.com/Blogs/scott/archive/2009/04/27/6-tips-for-asp-net-mvc-model-binding.aspx

Sugiero que como una solución para usar un archivador modelo para la clase MyModel, no es una solución perfecta pero puede refactor es fácil una vez que descubre una solución mejor. :)

0

En realidad, Si va a poner en un cierto Editar/Crear vista con el modelo de su MyModel clase algo como esto:

<%= Html.TextBox("Meta.Prop1") %> 

donde Prop1 es característica de la clase MyOtherModel, continuación

UpdateModel(model); 

completará el valor del cuadro de texto en su propiedad de submodelo personalizada. Y atras, el valor del cuadro de texto también se llenaría con ese valor del submodelo.

Por lo tanto, una vez que actualice su modelo actual, también estará actualizando submodelos.

+0

No funciona para mí ... –

+0

Me refiero a que la Prop1 es nula sin importar qué –

+0

tenga clases de anuncios y de mapas . El mapa es una propiedad de Ad (Linq a SQL). <% = Html.TextBox ("Map.Zoom", Model.Map.Zoom)%> funciona bien y actualiza la propiedad Zoom del modelo de mapa. Agregue FormCollection como parámetro a su acción: public ActionResult Create (formularios FormCollection) y vea qué campos están llegando a su acción. Entonces podemos verificar qué está mal. P.S. debe llamar a UpdateModel para su modelo principal. ¿Eres tú? –

Cuestiones relacionadas