How to get a session value in layout file in ASP.NET 5 MVC6

穿精又带淫゛_ 提交于 2019-12-10 15:02:34

问题


In ASP.NET 5 MVC 6 Beta 8 I need to read a session variable in in my _Layout.cshtml or alternatively get a reference to the current HttpContext.

Take note: In ASP.NET 5 referencing the Session object has changed significantly from ASP.net 4 as detailed in this question

The Context object has also been renamed to HttpContext between Beta7 and Beta8.

In My current controller I currently save the session variable like this

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

In my _Layout.cshtml I need to read the above session variable. I need to reference the current HttpContext somehow e.g

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

but I don't know how to the get the current HttpContext in a cshtml file.


回答1:


The naming between Context and HttpContext is somewhat confusing. You can access the HttpContext in a view using the Context property:

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

There is also a pending issue at the MVC repo regarding this: https://github.com/aspnet/Mvc/issues/3332




回答2:


using razor, you can get values this way

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

}
}

change

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

to

int intSessionValue = Int32.Parse(sessionName);

or to be safer

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

So you can check if conversion was successful

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


来源:https://stackoverflow.com/questions/33212908/how-to-get-a-session-value-in-layout-file-in-asp-net-5-mvc6

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!