Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问视图中的ViewBag变量_C#_Asp.net Mvc_Viewbag - Fatal编程技术网

C# 访问视图中的ViewBag变量

C# 访问视图中的ViewBag变量,c#,asp.net-mvc,viewbag,C#,Asp.net Mvc,Viewbag,终于放弃了问谷歌神 我正在尝试从下面的查询访问视图中的ViewBag变量 使用(var context=newprincipalcontext(ContextType.Domain)) { var un=UserPrincipal.FindByIdentity(上下文、User.Identity.Name); var userinfo=db.Users .Where(x=>x.sAMAccountName==un.sAMAccountName) .选择(x=>new { x、 sAMAccoun

终于放弃了问谷歌神

我正在尝试从下面的查询访问视图中的ViewBag变量

使用(var context=newprincipalcontext(ContextType.Domain))
{
var un=UserPrincipal.FindByIdentity(上下文、User.Identity.Name);
var userinfo=db.Users
.Where(x=>x.sAMAccountName==un.sAMAccountName)
.选择(x=>new
{
x、 sAMAccountName,
x、 身份证
}).First();
ViewBag.UserInfo=用户信息;
}
我在VS的断点观察程序中看到了变量

但是,当我尝试访问它们时:

不是100%确定我应该如何访问这些?我不想遍历它们,因为它们被作为字段放置在表单中。如前所述,谷歌之神并没有什么帮助。 谢谢

更新

我根据收到的关于演员阵容的回复仔细观察了一下。最终,我要做的是检索整个模型,并将其返回到ViewBag中,然后访问它:

using (var context = new PrincipalContext(ContextType.Domain))
{
     var un = UserPrincipal.FindByIdentity(context, User.Identity.Name);
     User info = new User();
     info = (User)db.Users
                .Where(x => x.sAMAccountName == un.SamAccountName)
                .First();
      ViewBag.User = info;

}
然后在视图中

@ViewBag.User.Id
@ViewBag.User.sAMAccountName
最终,我希望访问这些变量,而无需在循环中迭代它们。当我向查询中添加select语句时,它开始抱怨我试图向模型对象强制转换匿名字符串。是否能够从ASP中的模型检索select数据,或者是否需要返回整个模型集?现在只是好奇。
谢谢你的指导

对于ViewBag中的匿名类型对象,您不能仅使用
运算符访问其属性。这是因为匿名类型生成为。因此,更好的方法是创建一个具有所需属性的类型,如下所示(假设该类型名为
UserInfo
)。通过创建一个仅包含视图所需属性的单独类型,可以优化查询以仅从数据库中选择这些字段(一种常见做法)

然后,在“视图文件”中,您可以通过强制转换访问属性,如下所示:

(UserInfo(ViewBag.UserInfo)).sAMAccountName

在视图文件中使用反射访问属性的丑陋方式(不要这样做):


ViewBag.UserInfo的值是多少?您的
UserInfo
变量是否不为null?请尝试此
((UserInfo)ViewBag.UserInfo)?.sAMAccountName
与@Dongdong注释类似,在视图中使用
ViewBag
时需要强制转换类型,并检查它是否为null。@Dongdong
UserInfo
在ViewBag中是匿名类型
(UserInfo(ViewBag.UserInfo)).sAMAccountName
@{
    string name = ViewBag.UserInfo.GetType().GetProperty("sAMAccountName").GetValue(ViewBag.UserInfo) as string;
}