关于如何在MVC3中完成特定功能的建议

时间:2011-11-12 02:00:37

标签: asp.net-mvc-3 asp.net-mvc-routing asp.net-mvc-3-areas

我有一个MVC3应用程序,基于VS 2010的默认布局,我在下面的图像中看起来像是

Layout1

子菜单区域在_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 });

从菜单启动的所有实体控制器都是在控制器和视图中的视图中定义的标准。

我需要更改应用以使用如下布局

Layout2

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

Layout3

然后,当用户点击右侧子菜单时,网址应该看起来像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>

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

不确定我的问题是否非常明确,但我希望有人能理解我的目标。

谢谢

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分: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. 更改了所有涉及的视图,以便在视图中包含视图“body”,并在该部分的开头我将面板菜单加载为部分视图

    @section EntityCRUD
    {
        @Html.Partial("_PanelEntitiesMenu")
        ....
    }
    
  6. 不完全是我想要的,但这是我迄今为止找到的最好的。