none
Problema con RenderAction RRS feed

  • Pregunta

  • Hola mi problema es el siguiente, tengo un PartialView incrustado en una vista mediante RenderAction, en mi proyecto uso Areas la vista parcial a la que hago referencia se encuentra en la raiz de la app, la vista que lleva incrustada a la partialview esta en un Area llamada Admin,  el error es el siguiente:

    No se encuentra el controlador de la ruta de acceso '/Admin/Anuncios/DetalleAnuncio/82' o no implementa IController.

    Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código. 

    Detalles de la excepción: System.Web.HttpException: No se encuentra el controlador de la ruta de acceso '/Admin/Anuncios/DetalleAnuncio/82' o no implementa IController.

    Error de código fuente: 

    Línea 137:           { %>
    Línea 138:          <li>
    Línea 139:            <%Html.RenderAction("DetalleImagen", "Imagenes", new { id = imagen.IDImagen}); %></li></ul>
    Línea 140:        <%} %>
    Línea 141:      </div>

    Execution of the child request failed. Please examine the InnerException for more information.

    Alguien tiene idea de porque sucede esto?. Gracias por su tiempo.

    Un saludo cordial

    miércoles, 13 de julio de 2011 12:35

Respuestas

  • Buenas!

    Html.RenderAction usa la misma área que la que origina la petición. Si la petición inicial se redirige (por URL) a una área X, entonces todos los Html.RenderAction buscarán los controladores sólo en esta área (X).

    Si quieres desde una área X, renderizar una acción perteneciente a un controlador de otra área debes añadir el route value area con el nombre de la área de destino. Es decir, si yo desde la área X quiero renderizar una acción A del controlador C de otra área llamada Y, debo usar:

    <% Html.RenderAction("A","C", new { area="Y", id=xxxx}); %>
    

    Fíjate que además del route value id, he añadido el route value area que contiene el nombre de la área. La área principal tiene cadena vacía como nombre.

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    • Propuesto como respuesta José M. AguilarMVP miércoles, 13 de julio de 2011 15:12
    • Marcado como respuesta Richof miércoles, 13 de julio de 2011 19:33
    miércoles, 13 de julio de 2011 13:18

Todas las respuestas

  • Buenas!

    Html.RenderAction usa la misma área que la que origina la petición. Si la petición inicial se redirige (por URL) a una área X, entonces todos los Html.RenderAction buscarán los controladores sólo en esta área (X).

    Si quieres desde una área X, renderizar una acción perteneciente a un controlador de otra área debes añadir el route value area con el nombre de la área de destino. Es decir, si yo desde la área X quiero renderizar una acción A del controlador C de otra área llamada Y, debo usar:

    <% Html.RenderAction("A","C", new { area="Y", id=xxxx}); %>
    

    Fíjate que además del route value id, he añadido el route value area que contiene el nombre de la área. La área principal tiene cadena vacía como nombre.

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis
    • Propuesto como respuesta José M. AguilarMVP miércoles, 13 de julio de 2011 15:12
    • Marcado como respuesta Richof miércoles, 13 de julio de 2011 19:33
    miércoles, 13 de julio de 2011 13:18
  • Buenas!

    Html.RenderAction usa la misma área que la que origina la petición. Si la petición inicial se redirige (por URL) a una área X, entonces todos los Html.RenderAction buscarán los controladores sólo en esta área (X).

    Si quieres desde una área X, renderizar una acción perteneciente a un controlador de otra área debes añadir el route value area con el nombre de la área de destino. Es decir, si yo desde la área X quiero renderizar una acción A del controlador C de otra área llamada Y, debo usar:

    <% Html.RenderAction("A","C", new { area="Y", id=xxxx}); %>
    

    Fíjate que además del route value id, he añadido el route value area que contiene el nombre de la área. La área principal tiene cadena vacía como nombre.

    Un saludo!


    Eduard Tomàs Blog: http://geeks.ms/blogs/etomas -- Twitter: eiximenis

    Gracias por responder Eduard, era eso mismo, yo andaba poniendo route en vez de area, que tal ingenuo :/

    Muchas gracias. Un gran saludo

    miércoles, 13 de julio de 2011 19:35