繁体   English   中英

MVC3部分视图

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM