我知道我的问题很愚蠢,但我不知道我的问题的解决方案,并且可以理解 stackoverflow 上的类似问题。我在做简单的博客。当我去这个博客中的一篇文章时,我必须看到他的文章和评论文本。它们在我的数据库中,但我不知道如何显示两者。请帮我
问问题
253 次
4 回答
1
您必须创建一个 ViewModel 来表示此视图或此视图所需的数据,例如:
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
}
你应该使用这个 ViewModel 来输入你的视图,例如(使用剃刀):
@model Models.ViewModels.OrderViewModel
于 2012-05-29T17:36:28.667 回答
1
这取决于模型中注释的关系。通常评论应该是帖子的子集合。因此,在视图中,您应该能够使用以下内容(Razor)呈现评论:
@foreach (var comment in Model.Comments) {
// comments display goes here
}
确保当您将模型从控制器传递到视图时,您不会产生低效的查询。确保查询通过博客获取评论,具体取决于您在数据库中获取模型的方式。如果您使用的是 EF,那将是“包含”指令,例如
.Include(p => p.Comment);
于 2012-05-29T17:40:37.793 回答
1
您可以为此特定视图创建自定义 ViewModel。像这样的东西:
public class BlogReaderViewModel
{
// various fields which exist on either the post or the comments
}
然后,您将绑定到该视图的视图模型。Controller 操作将获取它需要的模型并构建 ViewModel 的实例以传递给 View。
另一种选择是使用Tuple
. 它是一个泛型类,充当多种其他类型的强类型容器。所以视图的模型会是这样的:
Tuple<Post, Comments>
从整体设计的角度来看,我最大的建议是考虑您的模型如何相互关联并找到您的“聚合根”。对于带有评论的博客文章,听起来文章应该是聚合根。模型本身应该包含注释。像这样的东西:
public class BlogPost
{
public string Title { get; set; }
public string Body { get; set; }
public IEnumerable<Comment> Comments { get; set; }
}
这个想法是聚合根是父对象并且在内部知道它的子对象。您不必在每次想要使用对象时手动组合这些对象层次结构。
于 2012-05-29T17:40:49.483 回答
0
一种选择是创建一个复合模型,该模型表示呈现视图所需的两组数据,并将每个子模型传递给视图本身的编辑器模板。
于 2012-05-29T17:34:40.233 回答