最终放弃询问Google Gods ...
我正在尝试从下面的查询访问视图中的ViewBag变量。
using (var context = new PrincipalContext(ContextType.Domain))
{
var un = UserPrincipal.FindByIdentity(context, User.Identity.Name);
var userinfo = db.Users
.Where(x => x.sAMAccountName == un.SamAccountName)
.Select(x => new
{
x.sAMAccountName,
x.Id
}).First();
ViewBag.UserInfo = userinfo;
}
我在VS的断点观察器中看到了变量
但是,当我尝试访问它们时:
不确定我应该如何访问这些文件?我不想遍历它们,因为它们以字段形式放置在表单中。如前所述,Google Gods的帮助不足。谢谢!
UPDATE
我根据收到的有关选角的回复仔细看了看。最终,我最终要做的是检索整个模型并将其返回到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
最终,我一直在寻找访问这些变量,而无需在循环中对其进行迭代。当我在查询中添加选择语句时,它开始抱怨我正在尝试将匿名字符串转换为模型对象。是否可以从ASP中的模型中检索选择的数据,还是需要返回整个模型集?现在只是好奇。谢谢您的指导!
使用ViewBag中的匿名类型对象,您不能仅通过使用.
运算符来访问其属性。这是因为匿名类型生成为internal
。因此,更好的方法是像这样创建具有所需属性的类型(例如,该类型称为internal
)。通过创建仅具有视图所需属性的单独类型,您可以优化查询以从数据库中仅选择那些字段(通常的做法)。
UserInfo
然后在视图文件中,可以像这样使用演员表来访问属性:
ViewBag.UserInfo = db.Users
.Where(x => x.sAMAccountName == un.SamAccountName)
.Select(x => new UserInfo // the object is now of type UserInfo
{
sAMAccountName = x.sAMAccountName,
Id = x.Id
}).First();
用反射方式在视图文件中访问属性的丑陋方式(不要这样做]:):
(UserInfo(ViewBag.UserInfo)).sAMAccountName
使用ViewBag中的匿名类型对象,您不能仅通过使用.
运算符来访问其属性。这是因为匿名类型生成为internal
。因此,更好的方法是创建具有所需属性的类型,例如这样(假设该类型称为internal
)
UserInfo
然后在视图文件中,可以像这样使用演员表来访问属性:
ViewBag.UserInfo = db.Users
.Where(x => x.sAMAccountName == un.SamAccountName)
.Select(x => new UserInfo // the object is now of type UserInfo
{
sAMAccountName = x.sAMAccountName,
Id = x.Id
}).First();
用反射方式在视图文件中访问属性的丑陋方式(不要这样做]:):
(UserInfo(ViewBag.UserInfo)).sAMAccountName