将分层数据传递给视图的最佳实践/首选项?

时间:2012-04-12 07:37:54

标签: asp.net-mvc asp.net-mvc-3

为简单起见,假设我有来自具有以下层次结构的对象模型的数据类:

  • 作者
      • 章节

这些数据类中的每一个都只包含对其子项的实例的引用,而不包含其父项的实例,对于它们的父项,它们仅包含Id。例如,Book有Book.Chapters,但它没有对其父级的引用(即:Book.Author),而是它具有父级的Id(即:Book.AuthorId)。

现在我想在我的视图中为此层次结构显示“breadcrumbs”。但要这样做,我需要获取诸如Author.Name,Book.Name等信息......所以我看到它有以下选项:

  1. 为每个视图创建自定义模型。即:新的SingleBookViewModel {TheAuthor = DB.GetAuthor(book.AuthorId),papers = book}

  2. 从书中获取视图中的数据。因此,如果我有书籍视图,我可以使用:作者author = GetAuthor(book.AuthorId)...并在剃刀视图中进行此操作。

  3. 使用Tuple类传递数据。因此,为了查看章节,我使用具有以下签名的元组填充模型:

    Tuple<Author, Book, Chapter>

  4. 您会使用哪种方法?或者你会使用不同的东西吗?

    目前我正在使用第三种方法,使用元组。

    第二种方法可能是最“标准”的。但我不喜欢必须创建和维护与其背后的每个数据类(作者,书籍,章节)相对应的视图模型类的想法。

    我想了解人们对此类内容的“最佳实践”......以及使用元组是否有意义。

1 个答案:

答案 0 :(得分:1)

我会用ViewModels实现这个。您的每个视图都将强大地输入到ViewModel,该视图将包含该视图所需的所有数据。您将在该ViewModel中获得一组作者,其中包含一系列书籍,其中包含一组章节。

作为替代方案,您可以将View绑定到作者集合,并在选择作者后,向控制器的操作发出ajax get请求,以返回Json格式的书籍。这同样适用于章节。