如何在ASP.NET 5 MVC6中的布局文件中获取会话值

时间:2015-10-19 11:12:48

标签: c# asp.net-core asp.net-core-mvc

在ASP.NET 5 MVC 6 Beta 8中,我需要在_Layout.cshtml中读取会话变量,或者获取对当前HttpContext的引用。

请注意:在ASP.NET 5中,引用Session对象已经从ASP.net 4发生了重大变化,详见this问题

{1}}对象在Beta7和Beta8之间也已重命名为Context

在我当前的控制器中,我目前保存会话变量,如此

HttpContext

在我的_Layout.cshtml中,我需要阅读上面的会话变量。 我需要以某种方式引用当前的HttpContext,例如

public IActionResult Index()
{
    HttpContext.Session.SetInt32("Template", (id));
}

但我不知道如何在cshtml文件中获取当前的HttpContext。

2 个答案:

答案 0 :(得分:11)

ContextHttpContext之间的命名有些令人困惑。您可以使用Context属性访问视图中的HttpContext:

@{ int x = Context.Session.GetInt32("test"); }

MVC回购中还有一个悬而未决的问题:https://github.com/aspnet/Mvc/issues/3332

答案 1 :(得分:2)

使用剃刀,你可以这样获得价值

@{
var sessionName = new Byte[20];
bool nameOK = Context.Session.TryGetValue("name", out sessionName);

if (nameOK)
{
    string result = System.Text.Encoding.UTF8.GetString(sessionName);
    <p> @result</p>

}
}

变化

string result = System.Text.Encoding.UTF8.GetString(sessionName);

int intSessionValue = Int32.Parse(sessionName);

或更安全

int intSessionValue = 0;
bool isConvertOK = Int32.TryParse(TextBoxD1.Text, out intSessionValue);

所以你可以检查转换是否成功

if (isConvertOK){
   //successful conversion from string to int
}