我有一个简单的 ASPNET MVC 列表视图,它传递一个自定义构建的模型对象。第一次通过我需要去服务器并返回一个对象列表并显示在视图上。我正在构建视图以允许按不同的列排序、搜索和分页,并且我已经为此编写了所有代码。但是,每次我去服务器并提取数据时。
我可以使用我第一次获得的列表来减少这些数据库往返吗?如果是这样,我如何将它从视图传递回控制器?
Viewdata, Tempdata - 或者通过formcollection
也许?
我有一个简单的 ASPNET MVC 列表视图,它传递一个自定义构建的模型对象。第一次通过我需要去服务器并返回一个对象列表并显示在视图上。我正在构建视图以允许按不同的列排序、搜索和分页,并且我已经为此编写了所有代码。但是,每次我去服务器并提取数据时。
我可以使用我第一次获得的列表来减少这些数据库往返吗?如果是这样,我如何将它从视图传递回控制器?
Viewdata, Tempdata - 或者通过formcollection
也许?
看看http://www.knockoutjs.com这将为您提供很多功能来操作浏览器中的列表并保持视图同步。
但这实际上取决于您的对象列表有多大。如果数据量很大,它实际上是您已经实现的方式更实用的解决方案。
实际上,如果你回到你的控制器,你就会去服务器。
我想你的意思是你不想再次重新查询你的数据库来获取过滤、排序和分页的数据,并且只想对模型视图类中的数据进行排序或分页,数据已经在视图上。
请记住,这种类型的操作不一定总是比重新查询数据库更好,因为您将通过网络将更多信息发送回服务器,并且通常以编程方式对类似列表的元素进行排序是操作较少比从数据库中排序检索优化。
这里的关键决定将在您的数据库查询的成本和您的列表视图元素的大小之间。如果您的查询很轻并且获得(或可以获得)很多结果,那么对其进行排序将比重新查询更昂贵,而如果您的查询很复杂并且通常会抛出很少的结果,那么实际上,在不重新查询数据库的情况下对数据进行排序会更有效.
尝试为排序创建一个新的控制器方法,此方法将作为参数接收您的列表视图模型类,并且您需要以某种方式将该信息发送回您的服务器。我通常使用 AJAX 调用,将数据作为 JSON 传递给控制器。