2012-05-29 56 views
0

我知道我的问题是愚蠢的,但我不知道我的问题的解决方案,并可以理解类似的问题在stackoverflow。 我在做简单的博客。 而当我在这个博客上看到一篇文章时,我必须看到他的文章和评论。他们在我的数据库中,但我不知道如何显示两者。 请帮我2个模型在1个视图

回答

1

您可以创建这个特殊的查看自定义视图模型。类似这样的:

public class BlogReaderViewModel 
{ 
    // various fields which exist on either the post or the comments 
} 

然后,您将绑定到视图的ViewModel。 Controller操作将获取它需要的模型并构建ViewModel的实例以传递给View。

另一种选择是使用a Tuple。它是一个泛型类,可以充当多种其他类型的强类型容器。所以查看的模式将是这样的:

Tuple<Post, Comments> 

从整体设计的角度来看,我最大的建议是考虑你的模型如何彼此相关,并找到你的“聚合根。”在有评论的博客文章的情况下,这听起来像帖子应该是聚合根。模型本身应该有其中的评论。像这样的东西:

public class BlogPost 
{ 
    public string Title { get; set; } 
    public string Body { get; set; } 
    public IEnumerable<Comment> Comments { get; set; } 
} 

这个想法是,聚合根是父对象,内部知道它的子对象。每次你想使用它们时,你都不必手动编写这些对象的层次结构。

0

一种选择是创建一个组合模型,它表示呈现视图所需的两组数据,并将每个子模型关闭到视图本身的编辑器模板。

1

你必须创建一个视图模型来表示此视图或数据,这种观点需要,例如:

public class OrderViewModel { 

    public int Id { get; set; } 
    public DateTime DateOrder { get; set; } 
    public decimal Total { get; set; } 
    public string CustomerName { get; set; } 

    public List<Item> Items { get; set; } 

    // other properties  
} 

你建议立即进行删除使用此视图模型输入您的看法,样品(用剃刀):

@model Models.ViewModels.OrderViewModel 
1

它取决于模型中注释的关系。通常评论应该是一个帖子的子集。因此,在视图中,应该能够使像这样的东西(剃刀)的评论:

@foreach (var comment in Model.Comments) { 
    // comments display goes here 
} 

确保当你通过模型从您不产生低效的查询控制器的看法。确保查询通过博客获得评论,具体取决于您如何在数据库中获取模型。如果您使用的EF是“Include”指令,例如

.Include(p => p.Comment); 
相关问题