Sugerencias sobre cómo lograr una funcionalidad específica en MVC3

Tengo una aplicación MVC3, basada en el diseño predeterminado de VS 2010, que cambié para parecerme a la imagen de abajo

Layout1

El área del submenú se define en _layout.cshtml como

    <div id="sidebar">
    

Entities

    
    @Html.Partial("_EntitiesMenu")
        
    </div>
    
@RenderBody()
 

y el _EntitiesMenu contiene entradas como abajo

  • @Html.ActionLink("Addresses", "Index", "Address")
  •       
    
  • @Html.ActionLink("Applications", "Index", "Application")
  •        
    

    Tengo un solo MapRoute definido como

    routes.MapRoute("Default",//Route name
        "{controller}/{action}/{id}",//URL with parameters
         { controller = "Home", action = "Index", id = UrlParameter.Optional });
    

    Todos los controladores de mi entidad iniciados desde el menú se definen de forma estándar en Controladores y vistas en Vistas.

    Lo que necesito es cambiar la aplicación para usar un diseño como se muestra a continuación

    Layout2

    Cuando los usuarios hacen clic en Entidades, la aplicación debe navegar a myapp/entities/o myapp/entities/index y debe abrir una vista en el área de trabajo principal que se verá a continuación.

    Layout3

    Luego, cuando los usuarios hacen clic en los submenús de la derecha, la url debería verse como myapp/entities/entity1/index, myapp/entities/entity1/edit/1, etc. (exactamente como ahora, pero debajo de la página de entidades). Definí el controlador de Entidades como

    public class EntitiesController : Controller
    {
        public ActionResult Index()
        { return View();}
    }
    

    Y su vista parece

    <div id="workarea">
       //here should became new Body region, to load all views called from the other controllers
       //something like @RenderBody(), but this don't works
    </div>
    <div id="sidebar">
    

    Entities

    
    
      @Html.Partial("_EntitiesMenu")
            
    </div>
    

    No quiero tener que realizar cambios en los controladores o vistas de las entidades (o cambios mínimos si es absolutamente necesario, porque hay muchos de ellos). ¿Puedo de alguna manera asignar esa área como Cuerpo principal, mientras esté bajo el alcance de las entidades? Y si el usuario hace clic en Inicio/Acerca de, se "descargará" EntitiesView from _layout.cshtml?

    No estoy seguro si mi pregunta es muy clara, pero espero que alguien entienda lo que busco.

    Gracias

    0

    2 Respuestas

    1
    agregado
    No del todo, porque @RenderSection puede estar solo en la vista principal, y quería tenerlo en la vista del Índice de Entidades. Logré "piratearlo" (en cierto modo) para obtener algo parecido a lo que necesito, pero se requiere cambiar TODAS las vistas, primero "ajustar" el código de vista en @section {..} y luego cargar el menú Entidades ver como parcial. No es una buena solución porque implica cambiar muchos archivos y el diseño no está limpio. ¿Alguna otra idea?
    agregado el autor bzamfir, fuente

    Logré (más o menos) lograr algo parecido a lo que necesito usando el siguiente enfoque:

    1. Changed the _layout as below

      <div> @RenderBody() </div> <div> @RenderSection("EntityCRUD", false) </div>
       
      
    2. Created the view for Entities as:

      @Html.Partial("_PanelEntitiesMenu")

    3. Defined _PanelEntitiesMenu as

      <div id="sidebar">
      

      Entities


        @Html.Partial("_EntitiesMenu")
              
      </div> 
      
    4. Enclosing the entities views (Index, Edit/Delete/Details/Create) in

      @section EntityCRUD
      {
      @Html.Partial("_PanelEntitiesMenu")
      //... original view code
      }
      
    5. Changed all involved views to have the view "body" included in section, and at the beginning of the section I load the panel menu as partial view

      @section EntityCRUD
      {
          @Html.Partial("_PanelEntitiesMenu")
          ....
      }
      

    No es exactamente lo que quería, pero eso es lo mejor que he encontrado hasta ahora.

    0
    agregado