【问题标题】:Access elements from several tables in IEnumerable in Razor view在 Razor 视图中访问 IEnumerable 中的多个表中的元素
【发布时间】:2019-04-28 12:33:55
【问题描述】:

我想问我如何访问列表,其中包含剃刀视图中多个表中的不同元素:

public IEnumerable Blogs { get; set; }

public async Task OnGetAsync()
{
    Blogs = await _context.Blog
            .Select(b => new
            {
                b.Id,
                b.Name,                           
                b.Owner.UserName,
            })
            .ToListAsync();

}

如何在 Razor 视图中访问它?

当我使用以下内容时:

@foreach (var b in Model.Blogs)
{
    <div> @b </div>
}

我将所有对象作为字符串! 但我不能使用 @b.Id 例如,我只是得到方法 (ToString, Equal ...)

如何访问对象属性?例如:@b.Id、@b.Name ...

谢谢

更新: 假设我想用这个:

public async Task OnGetAsync()
{
    var Blogs = await _context.Blog
            .Select(b => new
            {
                b.Id,
                b.Name,                           
                b.Owner.UserName,
            })
            .ToListAsync();

}

我如何通过索引访问 var 博客?

【问题讨论】:

  • 您可能应该使用具体类而不是匿名类。那么您的Blogs 属性可能是List&lt;SomeType&gt;
  • 谢谢,但正如你所见,我正在使用“new”来创建自定义选定值的新对象,所以不能使用博客类型的列表
  • 我确切地知道您目前在做什么,但是您需要做的是创建一个具有三个属性(Id、Name、OwnerName)的类。而不是说 new {} 这是一个 anonymous 类,你会说 new SomeType { } 这是一个 not 匿名类型。那么您的Blogs 属性将是List&lt;SomeType&gt;,因为您非常清楚地调用了ToListAsync()
  • 忘记我的查询,我需要了解如何在没有第三类的情况下修复它,即使使用新查询,请查看更新

标签: c# asp.net-mvc entity-framework razor-pages


【解决方案1】:

您应该创建一个具有您想要的三个属性的BlogViewModel 类,而不是使用匿名对象:

public class BlogViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string OwnerName { get; set; }
}

那么您的查询和列表构建逻辑将是:

public List<BlogViewModel> Blogs { get; set; }

public async Task OnGetAsync()
{
     Blogs = await _context.Blog
            .Select(b => new BlogViewModel()
            {
                Id = b.Id,
                Name = b.Name,                           
                OwnerName = b.Owner.UserName,
            })
            .ToListAsync();
}

然后您可以轻松地访问剃刀循环中的属性

【讨论】:

  • 谢谢,这似乎是最好的方法,但我想问一下,有没有办法告诉我定义的 ID 是 BLogId 我的意思是我想避免在这里再次添加数据注释,因为我已经添加了它们在每个模型类中?
  • @J.Edmond 为什么需要定义 ID?这只是为了在视图模型中显示值对吗?我想我不明白你为什么需要数据注释/属性
  • 好吧,但是标签?我的意思是我想看:全名:,而不是全名,所以这可以使用 DA 来完成,不是吗?
  • @J.Edmond 您的示例剃须刀没有指示任何 HTML 助手,所以我不知道您需要它。我建议的一件事是永远不要在视图中使用您的数据模型,您应该始终使用 ViewModels 将数据传输到视图。所以你可能想重新考虑你的 DA 属性在哪里,但这是一个更大的努力。
  • 没错,我认为使用 ViewModel 会更好,因为我们可以只包含我们想要的,而不是整个模型,再次感谢您,感谢您的帮助!如果您知道解决 DA 问题的任何方法或想法,我的意思是不要在每个 ViewModel 中声明它们一次,因为您知道我们可能需要在另一个页面中将博客与另一个对象一起使用,所以我们应该再次定义它们吗?无论如何..您的帮助将不胜感激。
猜你喜欢
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-23
相关资源
最近更新 更多