2011-08-11 17 views
9

Digamos que tengo un LineItem (del ejemplo de Carrito de Compras usado en exceso) y quiero renderizarlo usando un EditorTemplate.Pasar datos adicionales a EditorTemplate

Estoy perfectamente bien usando un @ Html.EditorFor (m => m.LineItems) desde la vista principal (parcial o de otro tipo), pero lo que es confuso es el mejor enfoque para pasar algunos datos adicionales (por ejemplo, SelectList que tiene datos procedentes de la base de datos) a la plantilla.

Está claro que no se debe contaminar el modelo de LineItem incorporando estos elementos extraños (que sin embargo se requieren desde la perspectiva de una vista.)

Estoy tratando de ver si hay una manera inflexible de hacer esto antes de recurrir a los trucos ViewBag/ViewData.

He intentado crear un modelo de vista específico 'LineItem' para pasar los datos, pero destruye los nombres generados por MVC y los anuncios una capa adicional a la colección (como paso en un IEnumerable <> del viewmodel a la llamada EditorFor(), en lugar de IEnumerable <> del elemento LineItem real)

Además, ¿se trata de un uso incorrecto de EditorTemplate? ¿Es un elemento LineItem que requiere un menú desplegable que tiene demasiadas opciones provenientes de una tabla de base de datos para un EditorTemplate?

Por favor, guíame hacia el MVC nirvana. Mientras espero las respuestas, probaré otras ideas.

Para aclarar: El motivo por el que estoy considerando utilizar EditorTemplate es debido al manejo automático de la colección que me proporciona. De lo contrario, todo el negocio [id] se vuelve demasiado pegajoso.

+0

¿No puede usar un dispositivo ChildAction para esto? – alexn

+0

¿Ha resuelto este problema desde entonces? –

+0

La acción infantil no es la mejor manera de crear IU de entrada. Resolví este problema usando una variación del método de Steven Sanderson (http://blog.stevensanderson.com/) para generar una lista de vistas parciales. – kidoman

Respuesta

11

Hace un tiempo me encontré con el mismo problema y encontré la solución this.

Para resumirlo, debe crear su modelo de vista personalizado que ajuste la colección original y los datos de soporte necesarios. Luego, en la vista que llama a la plantilla personalizada, puede usar las sobrecargas del método de extensión HtmlHelper para pasar los datos de soporte al diccionario ViewData. Desde su plantilla personalizada, puede recuperarlos y usarlos desde ViewData.

Creo que esta es una buena solución y, básicamente, esto es para lo que están diseñados los modelos de visualización, al menos es mucho mejor que extender o derivar de la clase original solo para proporcionar datos adicionales para la vista.

Háganme saber si se ajusta a su situación o si encuentra otra solución.

+0

Aunque terminé implementándolo sin EditorTemplates, esto es lo que habría usado con las plantillas de editor. – kidoman

+0

Gracias, la página enlazada fue útil –

+0

La URL cambió ... deben haber cambiado los CMS: http://weblogs.asp.net/jongalloway//using-viewmodel-information-in-an-asp-net-mvc -2-editor-o-display-template –

Cuestiones relacionadas