MVC 视图中的范围问题导致 IList<t> 失败(是:如何在<t> MVC 视图中实例化列表)



我有一个会话变量,它有一个列表,如下所示:

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();

我还没有弄清楚为什么,
但这是另一篇文章的问题......
(以上是用野蛮人柯南的语气说的(

最新更新