如何在布局文件中获取会话值.净5米6

本文关键字:会话 5米 获取 布局 文件 | 更新日期: 2023-09-27 18:18:22

我需要在我的_Layout.cshtml中读取会话变量,或者获得对当前HttpContext的引用。

注意:在ASP中。NET 5对Session对象的引用与ASP.net 4相比有了很大的变化,详见这个问题

在Beta7和Beta8之间,Context对象也被重命名为HttpContext

在我的当前控制器中,我当前像这样保存会话变量

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

In my _Layout。我需要读取上面的会话变量。我需要以某种方式引用当前HttpContext,例如

HttpContext.Current.Session.GetInt32("Template");

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

如何在布局文件中获取会话值.净5米6

ContextHttpContext之间的命名有些混乱。你可以使用Context属性在视图中访问HttpContext:

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

在MVC仓库中也有一个悬而未决的问题:https://github.com/aspnet/Mvc/issues/3332

使用razor,您可以这样获取值

@{
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
}