根据Session MVC3修改菜单

时间:2012-04-24 23:22:36

标签: asp.net-mvc-3 session razor menu controller

我不确定如何实现这一目标,所以我想就此提出一些建议。我想要完成的是基本上(我使用的是纯MVC3.Net)在特定会话开始或结束时修改布局页面的html。如果用户输入项目的详细信息(项目是实体),我的想法是基于向主菜单显示更多选项的要求。此外,选项取决于用户的类型。

在做了一些研究后,我想出了捕获会话启动事件的想法,我会在选择项目时创建,但我不确定在会话开始或结束时是否可以解决然后修改html。

实现这一目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

你可以根据会话从控制器控制视图的布局这里是一个简短的例子

@{
    ViewBag.Title = "Index";
    Layout = ViewBag.Layout;
}

public ActionResult Index()
    {
        if(Session["one]=="one")
       {
        ViewBag.Layout = "~/Views/Shared/site_1.cshtml";
       }
       if(Session["one"]=="two")
      {
       ViewBag.Layout = "~/Views/Shared/site_2.cshtml";

      }

}

答案 1 :(得分:0)

也许您可以使用https://github.com/maartenba/MvcSiteMapProvider中的动态站点地图功能来解决您的任务。

如果您不想使用此提供程序,我建议将BaseViewModel用于所有视图模型,并在那里存储项目状态。 所以你可以这样做:

@model BaseViewModel(or something derived) 
@{
    ViewBag.Title = "Index";
    Layout = ViewBag.Layout;
}

public ActionResult Index()
    {
       if(Model.HasProjectDetails)
       {
        @Html.Partial("_ExtendedNav")
       }
       if(Model.HasSomeExtraProjectDetails)
       {
        @Html.Partial("_MoreExtendedNav")
       }
}

但总体而言,我建议将网站地图提供程序与https://github.com/maartenba/MvcSiteMapProvider/wiki/Dynamic-sitemaps

一起使用