2015-10-19 27 views
3

在ASP.NET 5 MVC 6 Beta 8中,我需要讀取我的_Layout.cshtml中的會話變量,或者獲取對當前HttpContext的引用。如何在ASP.NET 5中的佈局文件中獲取會話值MVC6

請注意:在ASP.NET 5引用作爲this問題

Context對象也已更名爲同β7和Beta8之間HttpContext詳細Session對象已顯著從ASP.net 4改變。

在我的電流控制器我目前保存會話變量這樣

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

在我_Layout.cshtml我需要閱讀上面的會話變量。 我需要引用當前HttpContext莫名其妙e.g

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

,但我不知道如何將得到的CSHTML文件的當前HttpContext。

回答

9

ContextHttpContext之間的命名有點混淆。您可以使用Context屬性訪問的HttpContext的觀點:

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

也有在MVC回購對此未決問題:使用剃刀https://github.com/aspnet/Mvc/issues/3332

+0

謝謝你的正確答案和GitHub的鏈接。什麼引起我注意的是,在控制器中它被稱爲HttpContext,但在視圖中它只是上下文。 – firste

+0

是的,在測試版8中,他們將其重命名爲控制器中的「HttpContext」,但他們忘記了有關視圖。 –

1

,就可以得到價值這樣

@{ 
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 
} 
相關問題