我不确定如何实现这一点,所以我想对此提出一些建议。我想要完成的是基本上(我使用纯 MVC3.Net)在特定会话开始或结束时修改布局页面的 html。如果用户输入项目的详细信息(项目是一个实体),我的想法是基于在主菜单中显示更多选项的要求。此外,选项将取决于用户的类型。
在进行一系列研究之后,我想出了捕捉会话开始的事件的想法,我会在选择项目时创建,但我不确定在会话开始或结束时可以解决它,然后修改的HTML。
实现这一目标的最佳方法是什么?
我不确定如何实现这一点,所以我想对此提出一些建议。我想要完成的是基本上(我使用纯 MVC3.Net)在特定会话开始或结束时修改布局页面的 html。如果用户输入项目的详细信息(项目是一个实体),我的想法是基于在主菜单中显示更多选项的要求。此外,选项将取决于用户的类型。
在进行一系列研究之后,我想出了捕捉会话开始的事件的想法,我会在选择项目时创建,但我不确定在会话开始或结束时可以解决它,然后修改的HTML。
实现这一目标的最佳方法是什么?
您可以根据会话从控制器控制视图的布局这是一个简短的示例
@{
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";
}
}
也许您可以使用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的站点地图提供程序