我有一个会话变量,它有一个列表,如下所示:
Session["roles"] = UserManager.GetRoles(uid) as List<string>;
这完全有效
,但现在我想在我的布局中使用它,以便:
@{
List<string> rolz = Session["roles"] as List<string>;
}@
不幸的是,我一直收到这个错误:
使用泛型类型"System.collections.generic.list"需要 1 个类型参数
我看到了传递列表的示例,但是如何使用已经是列表
的预先存在的会话变量?
更新 1:请注意:我有兴趣在视图中
检索会话["角色"],而不是在另一个控制器
中,因此视图会吐出错误
,因为我认为它不喜欢这种语法"列表">
因为当我编码它时,它一直试图像这样智能它:
List<string></string>
更新2:标题已调整,以反映此问题的正确性质
使用UserManager.GetRoles
并将其放入HttpSessionState
的正确方法应该是这样的:
Session["roles"] = UserManager.GetRoles(uid).ToList(); // stores List<string>
上面的赋值将List<string>
存储到会话变量中,然后您可以在那里检索角色列表:
@{
var rolz = Session["roles"] as List<string>;
}
请注意,UserManager.GetRoles
方法返回可能与List<string>
不同的IList<string>
,因此需要ToList
方法来获得正确的List
类型。
参考:
ASP MVC:如何从应用程序用户获取角色
感谢您@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();
我还没有弄清楚为什么,
但这是另一篇文章的问题......
(以上是用野蛮人柯南的语气说的(