2009-06-04 21 views
5

que tienen la siguiente situación en una aplicación web:almacenamiento en caché vistas parciales en asp.net MVC

una tabla "Empleados", contiene la columna "Departamento" y "Función ". Ambos son listas desplegables.

Las opciones de la lista desplegable "Función" dependen del "departamento" seleccionado. (para que cada departamento tenga su propia lista de funciones)

Al cambiar el departamento, realizo una llamada ajax a una acción del controlador con el parámetro "DepartmentId". Hay un atributo [outputcache] en la acción de control para que las funciones que devuelve se guarden en caché para cada ID de departamento.

Mi problema es la carga inicial de la página. ¿Se puede llamar controlleraction en una vista y aprovechar el almacenamiento en caché?

¿Alguien? 30 visitas y no hay respuestas. ¿Alguna observación sobre mi pregunta? ¿Muy obvio? ¿demasiado duro? ¿muy raro? algo para google (aunque no encontré una solución allí)?

Respuesta

4

Phil Haack escribió una breve publicación en el blog sobre un tema similar llamado Donut Hole Caching. Sirve como un buen punto de partida.

+0

no estoy seguro si esto lo solucionó pero estoy marcando como respuesta de todos modos .. –

0

¿Quiere decir que desea llamar directamente a la acción del controlador que genera las funciones al generar la vista y no con ajax? Si lo entendí correctamente, no creo que sea posible acceder a los datos en el caché de resultados (aunque me puedo equivocar). De todos modos, si pudiera obtenerlo, igual tendría que decodificar los datos nuevamente.

También puede probar a

  • caché del departamento ids a sí mismo en el HttpContext.Cache y utilizarlos en ambas acciones (tal vez eso es tan rápido que no es necesario el OutputCache más y no tiene doble almacenamiento en caché)
  • O si el número de departamentos/funciones no es tan grande, puede crear una estructura json con todas las funciones, almacenarlas en la vista y no utilizar ajax en absoluto.
4

Usaría los subcontroladores o mejor aún solicitudes parciales para hacer lo que está pidiendo. En una página típica, tiendo a no almacenar en caché toda la página, sino que divido las áreas en diferentes métodos de acción que se llaman a través de solicitudes parciales. De esa manera puedo tener el almacenamiento en caché de salida en cada área con diferentes vencimientos. Se trata de más ciclos de vida de página, pero cuando se almacenan en caché, realmente no son un impuesto sobre el rendimiento. También es mucho más fácil mantener y optimizar un área específica si comienza a funcionar mal.

En mi experiencia, esto también encaja muy bien con los patrones de ajax ya que solo cada "obtiene" sus datos de un método de acción.

solicitudes parciales se discuten here y subcontroladores here

espero que esto ayude.

Cuestiones relacionadas