2009-11-11 58 views
5

En nuestra aplicación Asp.net MVC actual tenemos 2 sistemas de menú uno en la parte superior y otro en el lado izquierdo. Ahora tenemos una vista parcial que representa el menú, sin embargo, ¿es la única forma de que esto también funcione para devolver los elementos del menú con cada único modelo de vista? Estamos tratando de no usar el diccionario ViewData.Sistema de menú dinámico Asp.net MVC

Creo que la respuesta a esto es que sí, sin embargo Quiero ver lo que otros piensan

Respuesta

3

3 Opciones:

  1. RenderAction todo el camino.

  2. RenderPartial como Ryan respondió.

  3. Un MasterViewModel abstracto por ejemplo. Todos tus modelos heredarían de esto. Poblado por un filtro de acción.

3

podría utilizar la acción Render de la biblioteca MVC Future's si usted quiere tener su propio controlador, etc., para sus menús separados de usar el modelo de vista principal.

+1

Creo que se está refiriendo a RenderAction no RenderPartial del ensamblaje Futures. –

+0

Tienes razón, gracias. He editado la publicación. :) –

1

Es, básicamente, tiene dos opciones:

  1. Utilice el modelo de vista para establecer los elementos de menú para mostrar, que será accesible desde cualquier punto de vista, total o parcial.

  2. Cree una jerarquía de modelos muy tipados, coloque elementos de menú en algún lugar en el modelo base, y estará presente en todos y cada uno de los modelos derivados.

Lo que puede interesarle es controladores asincrónicos o solicitudes parciales. No está implementado en ASP.NET MVC, pero puede consultar el proyecto de la comunidad MVC Contrib, que cuenta con cierto soporte.

+0

La biblioteca de MVC Contrib es buena, pero puede ser más fácil simplemente usar la Biblioteca de MVC Future de Microsoft si todo lo que se requiere es la capacidad de representar parciales. –

0

Hay muchas opciones para manejar esto, pero hay una forma muy directa que hemos encontrado para manejar esto que no implica volver a diseñar toda su aplicación.

Hemos tenido problemas similares, donde nuestra página/parcial tiene un tipo ViewData.Model bien definido, pero la vista contiene un parcial que se reutiliza en varias páginas. También hemos tratado de evitar el uso de ViewDataDictionary también.

Sin embargo, encontramos que exactamente el caso que describe es el escenario EXACTO en el que nos gusta utilizar una entrada ViewDataDictionary. Mantenemos una clase Constants estática en nuestro modelo de aplicación que contiene clases internas para cada tipo de constante, incluidas las claves ViewData para que no tengamos cadenas para que estas cosas floten en todas partes.

Luego, nuestra acción de Controlador rellena la clave ViewData y el parcial dentro de la otra página/comprueba parcialmente la existencia de esa clave y la utiliza en lugar de ViewData.Model. Hace el trabajo parcial en cualquier lugar que lo necesite y mantiene su ViewModel limpio. Al usar constantes, evitamos cadenas sin formato en todas partes.

0

Use un filtro de acción para llenar ViewData con la información del menú que necesita. Aplíquelo solo a las clases y/o métodos (posiblemente en una clase de controlador base si es necesario en todas partes).Cree algunos métodos de extensión en Controller que hagan que el acceso a los datos de ViewData sea fuertemente tipado (y transparente en caso de que cambie su ubicación de almacenamiento más adelante).

Hace poco hice a blog post con un enfoque similar (necesitaba una lista de patrocinadores para mostrar en cada página). Puede ayudarlo a apuntar en la dirección correcta.

3

¿Está utilizando un controlador de base? Descubrí que usar uno y anular el método OnActionExecuting me ayuda a tener un lugar central para mantener toda mi lógica de página común.

0

Solo para agregar a esto, se agregó RenderAction a MVC2 Beta.

Cuestiones relacionadas