2010-12-08 21 views
5

He creado un área que se encargará de nuestras algunas cosas genéricas en todos nuestros productos de desarrollo, así como inicios de sesión, ayudantes HTML, etc. dentro del área, tengo una vista parcial que intento hacer referencia fuera del área. Me he registrado la zona conAsp.net MVC - Render una vista parcial de un área

public class Routes : AreaRegistration 
{ 
    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Common_default", 
      "Common/{controller}/{action}/{id}", 
      new { 
       controller = "Account", 
       action = "Index", 
       id = UrlParameter.Optional 
      }); 
    } 

    public override string AreaName 
    { 
     get { return "MvcCommons"; } 
    } 
} 

Y ahora en el proyecto normal, estoy intentando hacer referencia a una vista de la zona MvcCommons ...

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h2>TestGrid</h2> 

<% Html.RenderPartial("jQGridTable", ViewData.Model); %> 

Pero me siguen dando que la vista no se encuentra Antes, al crear el proyecto MVC Commons, que estaba recibiendo vista errores, pero los errores me dijeron que se veía en ambos las carpetas de la zona y la vista predeterminada de carpetas. Esta vez, solo obtengo las carpetas predeterminadas. ¿Hay alguna forma de lograr esto?

¡Gracias a todos!

Respuesta

5

No he tenido que hacer esto, pero supongo que debería usar Html.RenderAction(), algo así como Html.RenderAction("action", "controller", new { area = "Area", model = ViewData.Model }).

modelo

tendrá que ser reemplazado con el nombre de los parámetros de la acción, pero que debería funcionar.

Editar esto requerirá un controlador y una configuración de visualización para cada acción.

0

El defecto ViewEngine se ve por las vistas dentro de las carpetas misma área (o raíz), donde se hace referencia al control de usuario. Si desea crear una forma personalizada de usar o almacenar vistas, le sugiero que cree un ViewEngine personalizado. Por favor, eche un vistazo a este ejemplo: Implement Theme Folders using a Custom ViewEngine

0

Una cosa importante para recordar es que cuando usa RenderPartial lo usa en el contexto de la acción actual.

Como su acción no está en un área, solo se verá en la carpeta Ver/para el controlador al que pertenece la acción y luego a la carpeta compartida.

Cualquier punto de vista que desee compartir entre áreas y controladores y tener disponibles en la ruta debe ser la carpeta raíz Vista/compartidas. Realmente si la vista es exigible como parcial como que probablemente hay pocas razones para que pertenecen a un área.

Puede llamar al área cuando desea representar acciones en lugar de parciales, lo que luego cambia el contexto de la acción actual a la acción que llama, lo que le permite regresar las vistas dentro de esa área.

Cuestiones relacionadas