MVC3部分视图

时间:2011-12-29 01:43:57

标签: c# asp.net-mvc-3 partial-views

仍在学习MVC3,EF。目前我正在连接到MySql,但我认为这不相关。为简单起见,我决定为我的测试应用程序使用一个数据库,并且我已经包含了一个区分数据的类别。例如,我有新闻,事件,信息和页面类别。现在,当在视图中列出内容时,例如在主页上,我想列出最新的5个新闻项目(新闻类别),最新的5个事件(事件类别),欢迎文本(信息类别)。我已经能够创建partialViews列出这些在主页的不同部分。但我觉得这样做是错误的,因为在每个PartialViews中,我一遍又一遍地查询同一个表,只是在LINQ查询中使用where cat=....进行过滤。 您能否确认这是否应该是实践,还是有更好的方法来实现这一目标。

3 个答案:

答案 0 :(得分:6)

您可以执行以下操作:

控制器:

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>

这样我们只查询一次数据,只是将一个不同的集合传递给每个部分

答案 1 :(得分:0)

对于一种简单的呈现此类数据的方式,您正在做的事情很好。对于在Controller上使用的任何PartialView方法,您应该查看OutputCacheAttribute

答案 2 :(得分:0)

效率很低。但是你注意到这一点很好,因为查询该数据库通常是任何给定请求的瓶颈。

对于初学者,您应该将该数据检索到字典或模型中,然后将其传递给部分视图以呈现类似于Bassam概述的内容。理想情况下,应该在Controller中注意这一点,以坚持MVC范例,然后传递给主视图,然后主视图将适当的数据传递给部分视图。

一旦掌握了更高级/熟悉的ASP.NET MVC,就可以开始研究缓存了。我现在远离缓存,因为如果你有数据快速变化,因为你需要开始担心更新/同步/等等,它会变得有些棘手。