Al menos, creo que está relacionado con el problema. Mi caso es este:Editor Para no está trabajando en el tipo derivado
Tengo varias entidades comerciales con campos comunes, y cada una tiene campos personalizados únicos para esa entidad. Así que en el código, esto se modela como una clase EntityBase
, y hay una serie de clases derivadas de esto, por ejemplo, Derived
.
Para realizar una interfaz de usuario reutilizables, tengo una vista llamada EntityBase.vbhtml
que tiene este aspecto:
@ModelType EntityBase
@Using Html.BeginForm("Edit", Model.GetType.Name)
@* show the editor template for the derived type *@
@* !!the next line renders nothing!! *@
@Html.EditorFor(Function(x) Model, Model.GetType.Name)
[show a bunch of stuff common to all EntityBase objects]
End Using
y luego uno llamado Derived.vbhtml
para las clases derivadas que hace esto:
@ModelType Derived
[show an EditorFor for various Derived-specific fields]
Luego, cuando navegue a \Derived\Edit\123
, devuelve la vista predeterminada Derived\Edit.vbhtml
, que simplemente hace esto:
@Html.EditorForModel("EntityBase")
De esta manera, los controladores simplemente devuelven la vista de edición predeterminada esperada, que es una llamada de una sola línea a la vista EntityBase
, que hace lo suyo e invoca el Derived
para representar la clase derivada que no conoce.
Pensé que esto no tenía nada de especial, pero no funciona. Tal como está marcado en el código de vista, cuando llamo a EditorForModel dentro de la vista de clase base, especificando el nombre de la clase derivada para usar como una plantilla, no representa nada. He probado que si llamo a esta misma línea de código exacta en la plantilla Editar nivel superior, funciona bien. Entonces, hay algo acerca de la herencia que a MVC no le gusta, pero no puedo ver qué. ¡Por favor ayuda!
actualización: Funciona como yo esperaría si en lugar de EditorFor
utilizo Partial
(y mover la plantilla correspondiente a la carpeta compartida desde la carpeta EditorTemplates), pero eso no es una gran solución, porque creo que es confuso no siga la convención de nomenclatura para las plantillas EditorFor.
Tuve el mismo problema. Gracias por una gran solución. Estaba a punto de darme por vencido :) –
¡Me alegra oírlo! Realmente me arranqué el pelo en esta. –