(或代替)使用多个部分视图的最佳结构是什么?

我有一个视图,调用四个不同的部分视图(.ascx)来通过RenderAction调用填充视图的一部分。每个部分视图使用相同的视图模型,但每个部分视图通过底层模型中自己的EF查询返回不同的数据集。正如您在共享视图模型时所假设的那样,部分视图都返回几乎相同类型的信息 - 不同之处在于过滤。例如。 “新产品”与“热门产品”与“推荐产品”等 我得到了我想要的数据,但我需要解决这个问题,因为我的表现非常糟糕。每个单独查询的性能似乎并不太糟糕(我使用过LinqPad并测试了SQL Server中生成的SQL,性能非常好)。但是,总之,当我切换类别并重新加载页面时,页面加载时间非常短。 而不是对SQL服务器调用4个查询,我可以调用一个提取所有内容(对于所有4个),然后将结果过滤到单个部分视图中吗?这会更好吗? 非常感谢您的建议/意见。     
已邀请:
是。做一个查询和过滤会好得多。
List<Widgets> widgetsFromQuery = (from w in db.Widgets 
where w.Name.EndsWith("-sprocket") || 
w.Name.EndsWith("-seat") || 
w.Name == "toaster"
select c).ToList();
最后调用ToList(),迫使Linq立即执行查询。 然后使用widgetsFromQuery作为模型,并在每个视图中,像这样过滤:
var filteredModel = Model.Select(w => w.Name.EndsWith("-sprocket"));
var filteredModel = Model.Select(w => w.Name.EndsWith("-seat"));
var filteredModel = Model.Select(w => w.Name == "toaster"));
进一步的性能增强将是这样的: 1)在会话中缓存查询的输出(如果是用户特定的)或者如果不是则缓存应用程序缓存。 2)将每个视图绑定到一个动作,使用AJAX加载,并对动作使用输出缓存属性。     

要回复问题请先登录注册