1

我有以下 Session_Start 的 global.asax 设置:

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();
    }
}

我希望能够根据这个会话变量显示不同的部分布局。这样做的正确方法是什么?我可以从控制器加载部分视图还是需要在视图上处理它?

这是一个变量,我想在网站范围内使用它来确定特殊定价和着陆页广告素材。我是否必须在每个控制器上设置相同的结构,还是有更全局的方式来做到这一点?

谢谢,布赖恩

4

2 回答 2

1

如果要在所有页面中显示布局,则可能需要在布局文件中添加逻辑。在那里,您将添加类似的内容(假设剃须刀)

@if(HttpContext.Current.Session["someValue"]){
@*render some partial*@
}else{
@*render some other partial*@
}
于 2013-04-11T16:32:01.603 回答
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

于 2013-04-11T16:53:24.673 回答