[英]MVC3 Partial Views
仍在学习MVC3,EF。 目前,我正在连接MySql,但我相信这将不相关。 为简单起见,我决定为测试应用程序使用一个数据库,并且添加了一个类别来区分数据。 例如,我有一个新闻,事件,信息和页面类别。 现在,例如要在主页上的视图中列出内容,我想列出最新的5个新闻项(新闻类别),最新的5个事件(事件类别),欢迎文本(信息类别)。 我已经能够创建partialViews,以在首页的不同部分列出这些视图。 但是我感觉做错了,因为在这些PartialViews中的每一个我都在一遍又一遍地查询同一张表,并且只使用LINQ查询where cat=....
进行过滤。 您可以确认是否应该这样做,或者有更好的方法来做到这一点。
您可以执行以下操作:
控制器:
public ActionResult Home()
{
IEnumerable<MyDateRecords> myData = LinqQueryToGetAllTheDataUnFiltered();
ViewData.Model = new MyViewData { MyData = myData; }
return View();
}
ViewModel类:
public class MyViewData
{
List<MyDataRecords> MyData { get; set; }
List<MyDataRecords> News { get { return MyData.Where(m => m.Category = "News"); } }
List<MyDataRecords> Events { get { return MyData.Where(m => m.Category = "Events"); } }
}
视图:
@model MyViewModel
@Html.Partial("NewsPartial", Model.News)
@Html.Partial("EventsPartial", Model.Events)
部分:
@model IEnumerable<MyDataRecord>
这样,我们只查询一次数据,并向每个部分传递不同的集合
对于显示这种类型数据的简单方法,您正在做的很好。 您应该查看在Controller上使用的任何PartialView方法的OutputCacheAttribute 。
这是非常低效的。 但是,您注意到这一点很好,因为查询该数据库通常是任何给定请求中的瓶颈。
对于初学者,您应该将数据检索到字典或模型中,然后将其传递到局部视图以进行类似于Bassam概述的渲染。 理想情况下,应该在Controller中注意这一点,以坚持MVC范例,然后将其传递给主视图,该视图随后将适当的数据传递给部分视图。
一旦对ASP.NET MVC有了更高级的了解,就可以开始研究缓存了。 我现在不打算缓存,因为如果您的数据正在快速变化,因为您需要开始担心更新/同步/等,因此它会变得有些棘手。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.