0

我有一个 MVC3 应用程序,基于 VS 2010 的默认布局,我将其更改为如下图所示

布局1

子菜单区域在 _layout.cshtml 中定义为

    <div id="sidebar">
    <h3>Entities</h3>
    <p></p>
        <ul>
            @Html.Partial("_EntitiesMenu")
        </ul>        
    </div>
    <section id="main">
        @RenderBody()
    </section>

_EntitiesMenu 包含以下条目

<li>@Html.ActionLink("Addresses", "Index", "Address")</li>      
<li>@Html.ActionLink("Applications", "Index", "Application")</li>       

我有一个 MapRoute 定义为

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

我从菜单开始的所有实体控制器都在控制器中定义标准,在视图中定义视图。

我需要的是更改应用程序以使用如下布局

布局2

当用户单击实体时,应用程序应该导航到 myapp/entities/ 或 myapp/entities/index,它应该在主工作区打开一个视图,如下所示

布局3

然后当用户点击右侧子菜单时,url 应该看起来像 myapp/entities/entity1/index、myapp/entities/entity1/edit/1 等(就像现在一样,但是“在”实体页面下。
我定义了实体控制器,如

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

它的视图看起来像

<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">
<h3>Entities</h3>
<ul>
    @Html.Partial("_EntitiesMenu")
</ul>        
</div>

我不想对实体控制器或视图进行更改(如果绝对必要,也可以进行最小的更改,因为它们有很多)。我可以在实体范围内以某种方式将该区域指定为主体吗?如果用户点击顶部主页/关于,它会从_layout.cshtml“卸载”实体视图?

不知道我的问题是否很清楚,但我希望有人能理解我所追求的。

谢谢

4

2 回答 2

1

你在谈论@RenderSection http://blogs.msdn.com/b/marcinon/archive/2010/12/08/optional-razor-sections-with-default-content.aspx

于 2011-11-12T02:12:26.667 回答
0

我设法(有点)使用以下方法完成了接近我需要的事情:

  1. 更改了 _layout 如下

    <section id="main">
        <div>
            @RenderBody()
        </div>
        <div>
            @RenderSection("EntityCRUD", false)
        </div>
    </section>
    
  2. 为实体创建了视图:

    @Html.Partial("_PanelEntitiesMenu")

  3. 将 _PanelEntitiesMenu 定义为

    <div id="sidebar">
    <h3>Entities</h3>
    <p></p>
        <ul>
        @Html.Partial("_EntitiesMenu")
        </ul>        
    </div> 
    
  4. 将实体视图(索引、编辑/删除/详细信息/创建)包含在

    @section EntityCRUD
    {
    @Html.Partial("_PanelEntitiesMenu")
    //... original view code
    }
    
  5. 更改了所有涉及的视图以将视图“正文”包含在部分中,并且在部分的开头我将面板菜单加载为部分视图

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

不完全是我想要的,但这是我迄今为止发现的最好的。

于 2011-11-15T09:03:28.520 回答