Asp.net mvc 3 关于如何在MVC3中实现特定功能的建议

Asp.net mvc 3 关于如何在MVC3中实现特定功能的建议,asp.net-mvc-3,asp.net-mvc-routing,asp.net-mvc-3-areas,Asp.net Mvc 3,Asp.net Mvc Routing,Asp.net Mvc 3 Areas,我有一个MVC3应用程序,基于VS2010的默认布局,在下图中我将其更改为类似 子菜单区域在_layout.cshtml中定义为 <div id="sidebar"> <h3>Entities</h3> <p></p> <ul> @Html.Partial("_EntitiesMenu") </ul

我有一个MVC3应用程序,基于VS2010的默认布局,在下图中我将其更改为类似

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

    <div id="sidebar">
    <h3>Entities</h3>
    <p></p>
        <ul>
            @Html.Partial("_EntitiesMenu")
        </ul>        
    </div>
    <section id="main">
        @RenderBody()
    </section>
从菜单开始的所有“我的实体”控制器都在“控制器”和“视图”中的“视图”中定义为标准

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

<section id="main">
    <div>
        @RenderBody()
    </div>
    <div>
        @RenderSection("EntityCRUD", false)
    </div>
</section>

当用户单击实体时,应用程序应导航到myapp/Entities/或myapp/Entities/索引,并应在主工作区中打开如下所示的视图

然后,当用户单击右侧子菜单时,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>

//此处应成为新的主体区域,以加载从其他控制器调用的所有视图
//类似于@RenderBody(),但这不起作用
实体
    @Html.Partial(“实体菜单”)
我不想对实体控制器或视图进行更改(或者在绝对必要的情况下进行最小更改,因为它们太多了)。我是否可以在实体范围下以某种方式将该区域指定为主体?如果用户单击顶部主页/About,它将从_layout.cshtml“卸载”实体视图

我不确定我的问题是否很清楚,但我希望有人能理解我的意图


谢谢你

你说的是@RenderSection吗

我用以下方法(某种程度上)完成了一些接近我需要的东西:

  • 更改了_布局,如下所示

    <section id="main">
        <div>
            @RenderBody()
        </div>
        <div>
            @RenderSection("EntityCRUD", false)
        </div>
    </section>
    
  • 更改了所有涉及的视图,使视图“主体”包含在部分中,并在第一部分的开头加载面板菜单作为部分视图

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

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

    不完全是,因为@RenderSection只能在主视图中,我想在Entities Index视图中使用它。我设法“破解”它(某种程度上)以获得接近我需要的东西,但它需要更改所有视图,首先在@section{..}中“包装”视图代码然后将实体菜单视图作为部分加载。这不是一个好的解决方案,因为它涉及更改大量文件,并且设计不干净。还有其他想法吗?
    <div id="sidebar">
    <h3>Entities</h3>
    <p></p>
        <ul>
        @Html.Partial("_EntitiesMenu")
        </ul>        
    </div> 
    
    @section EntityCRUD
    {
    @Html.Partial("_PanelEntitiesMenu")
    //... original view code
    }
    
    @section EntityCRUD
    {
        @Html.Partial("_PanelEntitiesMenu")
        ....
    }