2017-08-02 11 views
0

我有了這樣一個列表會話VAR是:範圍界定問題(是:如何實例在MVC視圖列表<t>)

Session["roles"] = UserManager.GetRoles(uid) as List<string>; 

是完全工作
但現在我想在我的佈局使用它這樣的:

@{ 
List<string> rolz = Session["roles"] as List<string>; 
}@ 

,不幸的是我不斷收到此錯誤:使用通用型
「system.collections.generic.li ST」需要1個類型參數

我看到過
通過列表的例子,但如何使用先前存在的會話VAR已經是一個列表?

UPDATE 1:
PLS注意:
IM興趣在另一個控制器
作爲這樣的視圖檢索會話[「角色」]在視圖
不被吐痰錯誤
因爲我不要以爲它喜歡這句法「列表」
因爲當IM編碼它是不停地嘗試智能感知這樣的:

List<string></string> 

更新2 :標題已被調整,以反映這個問題

+0

你試過:'名單<串> rolz =(名單<串>)會議["角色"]'。直接轉換爲字符串列表。爲什麼列出而不是數組? :)編輯:評論使用移動應用程序,所以沒有實時評論。對不起@Valkyriee幾乎相同的評論。 – Spectarion

+0

'UserManager.GetRoles'返回一個'IList ' – Nkosi

+0

@nkosi - 是的,它確實返回一個ilist,但如果你注意到 - 我做了一個合法的演員列表 – toy

回答

0

謝謝@tesuya設置我在正確的方向
看來,真正的答案,這一點關係都沒有與拉會話值超出
但而一個範圍發出這樣
原來完整的代碼是這樣的:

@{ 
    string me = @ViewContext.RouteData.Values["controller"].ToString() + "-" + @ViewContext.RouteData.Values["action"].ToString(); 
    string jscript = "/Scripts/es/" + me + ".js"; 
} 

,然後當我加入會話VAR它沒有這樣的:

@{ 
    string me = @ViewContext.RouteData.Values["controller"].ToString() + "-" + @ViewContext.RouteData.Values["action"].ToString(); 
    string jscript = "/Scripts/es/" + me + ".js"; 
    var rolz = Session["roles"] as List<string>; 
} 

當我做這個但是一切工作:

@{ 
    var rolz = Session["roles"] as List<string>; 
    string me = @ViewContext.RouteData.Values["controller"].ToString() + "-" + @ViewContext.RouteData.Values["action"].ToString(); 
    string jscript = "/Scripts/es/" + me + ".js"; 
} 

因此出錯的行引起的問題是這樣的:

string me = @ViewContext.RouteData.Values["controller"].ToString() + "-" + @ViewContext.RouteData.Values["action"].ToString(); 

我仍然沒有想出爲什麼
但這是另一個職位的問題...
(在柯南野蠻人的語氣上面說的)

2

的正確的性質使用UserManager.GetRoles &放入HttpSessionState應該是這樣的正確方法:

Session["roles"] = UserManager.GetRoles(uid).ToList(); // stores List<string> 

以上門店List<string>分配到會話變量,然後你可以檢索的角色出現的列表:

@{ 
    var rolz = Session["roles"] as List<string>; 
} 

注意UserManager.GetRoles方法返回IList<string>可能不同從List<string>,所以它需要ToList方法得到正確的List類型。

參考:

Asp MVC: How get roles from ApplicationUser

+0

謝謝tetsuya的開始。我沒有考慮使用鬆散類型的「rolz」,但是第二個列表現在給了我相同的泛型類型的錯誤,我不能逃脫,因爲鬆散類型 – toy

+0

ps @tetsuya - 你包括的引用不涉及從會話中拉列表在我的問題的關鍵 - 只是從用戶經理 – toy

+0

的拉列表看來,我把'GetRoles'返回的'IList '轉換爲'List ',使用'ToList' - 使用'as'操作符提取列表返回null而不是'NullReferenceException'(檢查https://stackoverflow.com/questions/3035291/how-to-add-liststring-in-session-state&https://stackoverflow.com/questions/8194238 /如何做回收 - 一個泛型列表,從會話)。 –