Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 向视图传递分层数据的最佳实践/首选项?_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

Asp.net mvc 向视图传递分层数据的最佳实践/首选项?

Asp.net mvc 向视图传递分层数据的最佳实践/首选项?,asp.net-mvc,asp.net-mvc-3,Asp.net Mvc,Asp.net Mvc 3,为了简化示例,假设我有一个对象模型中的数据类,具有以下层次结构: 作者 书 章节 这些数据类中的每一个都只包含对其子类实例的引用,而不包含其父类实例的引用。对于其父类,它们只包含Id。例如,Book有Book.Chapters,但它没有对其父类(即Book.Author)的引用,而是具有父类的Id(即Book.AuthorId) 现在我想在视图中显示这个层次结构的“面包屑”。但要做到这一点,我需要获得诸如作者。姓名,书籍。姓名。。。因此,在我看来,我有以下选择: 为每个视图创建自定义

为了简化示例,假设我有一个对象模型中的数据类,具有以下层次结构:

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

现在我想在视图中显示这个层次结构的“面包屑”。但要做到这一点,我需要获得诸如作者。姓名,书籍。姓名。。。因此,在我看来,我有以下选择:

  • 为每个视图创建自定义模型。ie:new SingleBookViewModel{TheAuthor=DB.GetAuthor(book.authord),TheBook=book}

  • 从书本中获取视图本身中的数据。因此,如果我有图书视图,我将能够使用:Author Author=GetAuthor(book.authord)。。。在razor视图本身中执行此操作

  • 使用Tuple类传入数据。因此,为了查看第1章,我使用具有以下签名的元组填充模型:Tuple

  • Tuple<Author, Book, Chapter> 你会用哪种方法?或者你会用不同的东西吗

    目前我正在使用第三种方法,即Tuple

    第二种方法可能是最“标准”的方法。但我不喜欢创建和维护视图模型类,这些类对应于它们背后的每个数据类(作者、书籍、章节)


    我想了解人们在这类事情上采取了哪些“最佳实践”。。。以及使用元组是否有意义。

    我将用ViewModels实现这一点。每个视图都将强类型化为ViewModel,该ViewModel将包含该视图所需的所有数据。您可以在该视图模型中获得一组作者,其中包含一组书籍,其中包含一组章节


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

    我将使用ViewModels实现这一点。每个视图都将强类型化为ViewModel,该ViewModel将包含该视图所需的所有数据。您可以在该视图模型中获得一组作者,其中包含一组书籍,其中包含一组章节


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

    不幸的是,Ajax/JSON无论如何都不会帮助我,因为数据是静态的(意味着在视图“呈现”后它不会改变),并且是“面包屑”,需要从一开始就向用户显示信息。然后创建一个ViewModel对象,包装您需要的所有数据,甚至应该显示在面包屑中的数据。您的视图只渲染它接收到的任何内容。这不管用吗?是的。唯一的缺点是我在问题中提到的关于这些视图模型的创建/维护的问题。正确,但是由于您的视图需要越来越多的数据,甚至可能是不相关的数据,您必须找到一种方法将其提供给视图。ViewModel非常完美,因为您可以轻松地向其添加其他属性。此外,如果您将所有数据整齐地打包到ViewModel中,那么最终会得到一个只显示所获得内容的视图(包括面包屑),这本身就是一个很好的做法。不幸的是,Ajax/JSON无论如何都不会帮助我,因为数据是静态的(这意味着在“呈现”视图后它不会更改)作为“面包屑”,信息需要从一开始就显示给用户。然后创建一个ViewModel对象,该对象包装您需要的所有数据,甚至应该显示在面包屑中的数据。您的视图只渲染它接收到的任何内容。这不管用吗?是的。唯一的缺点是我在问题中提到的关于这些视图模型的创建/维护的问题。正确,但是由于您的视图需要越来越多的数据,甚至可能是不相关的数据,您必须找到一种方法将其提供给视图。ViewModel非常完美,因为您可以轻松地向其添加其他属性。此外,如果您将所有数据整齐地打包到ViewModel中,那么最终会得到一个只显示所有数据的视图(包括面包屑),这本身就是一个很好的实践。