我的global.asax设置包含以下Session_Start:
protected void Session_Start()
{
HttpContext.Current.Session.Add("sourceCode", "default");
}
在我的控制器上,我有以下内容:
public ActionResult Index(string sourceCode)
{
if (sourceCode != null && sourceCode != "default")
{
Session["sourceCode"] = sourceCode;
return View();
}
else
{
return View();
}
}
我希望能够根据此会话变量显示不同的部分布局。这样做的正确方法是什么?我可以从控制器加载局部视图,还是需要在视图上处理它?</ p>
这是一个变量,我想在网站范围内使用它来确定特殊定价和着陆页广告素材。我是否必须在每个控制器上设置相同的结构,或者是否有更全面的方法来执行此操作?
谢谢, 布赖恩
答案 0 :(得分:1)
如果要在所有页面中显示布局,可能需要在布局文件中添加逻辑。在那里,你会添加类似的东西(假设剃刀)
@if(HttpContext.Current.Session["someValue"]){
@*render some partial*@
}else{
@*render some other partial*@
}
答案 1 :(得分:0)
根据MVC的惯例,控制器应该决定它应该打开哪个视图。对于控制器中的这个,你有这样的代码:
public ActionResult Index(string sourceCode)
{
if (sourceCode != null && sourceCode != "default")
{
Session["sourceCode"] = sourceCode;
ViewData["PartialView"] = "partialviewname1";
}
else
{
ViewData["PartialView"] = "partialviewname2";
}
return View();
}
并且在视图中你可以编写如下代码:
<div>
@Html.Partial(Convert.ToString(ViewData["PartialView"]))
</div>
如果您已决定必须在每个请求上加载哪个部分视图,那么您可以在全局操作过滤器中编写上述逻辑。全局操作过滤器在任何请求的操作方法之前执行。要了解有关全局操作过滤器的更多信息,可以浏览此链接。 http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs