2010-12-10 17 views
7

He estado moviendo un proyecto bastante nuevo desde ViewPages a Razor hoy, y todo parece ir bien. Excepto que estoy tratando de usar Html.Action para representar un control de usuario y no generará nada.Asp.Net MVC 3 - @ Html.Action no procesará/devolverá ningún código HTML

Así que tengo un archivo compartido/_Layout.cshtml la que se hace referencia en Inicio/Index.cshtml

Index.cshtml tiene las siguientes: trampas

<article> 

@Html.Action("LatestBlogsMainPanelWidget", "Blogs") 

... 

</article> 

que he puesto en el BlogsController, entonces sé que se está solicitando. También sé que se está devolviendo un modelo, que el motor de visualización está encontrando el archivo LastBlogsMainPanelWidget, e incluso se está ejecutando algún código de sintaxis Razor ficticio: @ { var s = "hello"; }

pero el html simple en este archivo no lo está haciendo en el navegador. He intentado otros parciales (que funcionaban anteriormente) y tampoco aparecerán (ver fuente en la página confirma que no está allí).

También he intentado sustituir @ {Html.RenderAction (...); } sin éxito. Está apareciendo HTML a cada lado de @ Html.Action, así que sé que Index.cshtml se está mostrando correctamente.

Aún más extraño es que el archivo _Layout también tiene comandos Html.Action y do parecen estar bien.

No estoy seguro de qué más comprobar, o cómo confirmar que la canalización está recibiendo el código HTML. ¿Alguien puede ayudar en absoluto?

Gracias!

+0

¿La vista de esa acción está ubicada en el lugar correcto? No importa, acabo de ver la línea que estaba buscando. – Buildstarted

Respuesta

1

El cerebro es una cosa graciosa, y a pesar de pasar varias horas en esto ayer, mi perro me despertaba en medio de la noche para que mi subconsciente tropezara con la respuesta.

Si esto hubiera dejado perplejos a alguien más, no estoy sorprendido. No había mencionado porque no había caído en la cuenta de que estaba usando un sistema de almacenamiento en caché de nivel parcial similar a uno diseñado por Steve Sanderson. De repente, me di cuenta de que esta podría ser la causa, ya que, a mi leal saber y entender, las páginas Razor atraviesan mucho menos procesamiento que las páginas WebForm. Es probable que el filtro de almacenamiento en caché no esté haciendo lo que debe hacer, o en el momento correcto.

He confirmado que comentar el filtro OutputCache en las Acciones en cuestión ha solucionado el problema.

No tengo idea si este problema es cierto para el almacenamiento en caché a nivel de página, ya que no es algo que encuentre útil.

+0

Más curioso y más curioso. Acabo de instalar RC2 de MVC 3 y el almacenamiento en caché de nivel parcial está funcionando nuevamente, y todas las funciones html se muestran nuevamente. Bueno, perdón por la molestia! –

6

Prueba esto:

@ {Html.RenderAction ("LatestBlogsMainPanelWidget", "blogs");}

+0

Puede ver en la pregunta original que lo había intentado. Gracias de cualquier manera. –

8

Deja un diseño = null en la vista parcial y no tendrán ningún problema.

+0

exactamente lo que necesitaba. Esto fue útil para mi acción decorada con el atributo [ChildActionOnly]. – David

+8

en realidad, acabo de enterarme de que, en lugar de agregar eso, (en mi caso) solo necesitaba cambiar la vista de retorno para devolver Vista parcial. – David

1

Al buscar soluciones para este problema, he descubierto tres problemas de medida para la representación incorrecta de Html.Action y Html.RenderAction. Verifique que haya hecho las cosas a continuación correctamente o no.

  1. En su PartialView o ver que haya definido @ {Disposición = null;}.
  2. Utilice return PartialView en lugar de Ver.
  3. Decora tu acción con [ChildActionOnly] atributos.

Espero que al aplicar todos los pasos anteriores pueda resolver sus problemas.