廉政网站 建设需求,信息流广告,重庆市建设工程造价管理协会官网,山东网络推广咨询电话原文:解读ASP.NET 5 MVC6系列#xff08;14#xff09;#xff1a;View Component在之前的MVC中#xff0c;我们经常需要类似一种小部件的功能#xff0c;通常我们都是使用Partial View来实现#xff0c;因为MVC中没有类似Web Forms中的WebControl的功能。但在MVC6…原文:解读ASP.NET 5 MVC6系列14View Component 在之前的MVC中我们经常需要类似一种小部件的功能通常我们都是使用Partial View来实现因为MVC中没有类似Web Forms中的WebControl的功能。但在MVC6中这一功能得到了极大的改善。新版MVC6中提供了一种叫做View Component的功能。 你可以将View Component看做是一个mini的Controller——它只负责渲染一小部分内容而非全部响应所有Partial View能解决的问题你都可以使用View Component来解决比如动态导航菜单、Tag标签、登录窗口、购物车、最近阅读文章等等。 View Component包含2个部分一部分是类继承于ViewComponent另外一个是Razor视图和普通的View视图一样。就像新版MVC中的Controller一样ViewComponent也可以使POCO的即不继承ViewComponent类但类名以ViewComponent结尾。 View Component的创建 目前View Component类的创建方式有如下三种 直接继承于ViewComponent给类加上ViewComponent特性或继承于带有ViewComponent特性的类创建一个类类名以ViewComponent结尾 和Controller一样View Component必须是public的不能嵌套不能是抽象类。 举例来说我们创建一个View Component类名为TopListViewComponent代码如下 public class TopListViewComponent : ViewComponent
{private readonly ApplicationDbContext db;public TopListViewComponent(ApplicationDbContext context){db context;}public IViewComponentResult Invoke(int categoryId, int topN){Liststring col new Liststring();var items db.TodoItems.Where(x x.IsDone false x.categoryId categoryId).Take(topN);return View(items);}
} 上述类也可以定义成如下这样 [ViewComponent(Name TopList)]
public class TopWidget
{// 其它类似
} 通过在TopWidget类上定义一个名称为TopList的ViewComponent特性其效果和定义TopListViewComponent类一样系统在查找的时候都会认可并且在其构造函数中通过依赖注入功能提示构造函数中参数的类型实例。 Invoke方法是一个约定方法可以传入任意数量的参数系统也支持InvokeAsync方法实现异步功能。 View Component的视图文件创建 以在ProductController的视图里调用View Component为例我们需要在Views\Product文件夹下创建一个名称为Components的文件夹该文件夹名称必须为Components。 然后在Views\Product\Components文件夹下创建一个名称为TopList 的文件夹该文件夹名称必须和View Component名称一致即必须是TopList。 在Views\Product\Components\TopList文件夹下创建一个Default.cshtml视图文件并添加如下标记 model IEnumerableBookStore.Models.ProductItemh3Top Products/h3
ulforeach (var todo in Model){litodo.Title/li}
/ul 如果再View Component中没有指定视图的名称将默认为Default.cshtml视图。 至此该View Component就创建好了你可以在Views\Product\index.cshtml视图中的任意位置调用该View Component比如 div classcol-md-4Component.Invoke(TopList, 1, 10) /div 如果在上述TopListViewComponent中定义的是异步方法InvokeAsync的话则可以使用await Component.InvokeAsync()方法来调用这两个方法的第一个参数都是TopListViewComponent的名称剩余的参数则是在TopListViewComponent类中定义的方法参数。 注意一般来说View Component的视图文件都是添加在Views\Shared文件夹的因为一般来说ViewComponent不会特定于某个Controller。 使用自定义视图文件 一般来说如果要使用自定义文件我们需要在Invoke的方法返回返回值的时候来指定视图的名称示例如下 return View(TopN, items); 那么就需要创建一个Views\Product\Components\TopN.cshtml文件而使用的时候则无需更改还是指定原来的View Component名称即可比如 await Component.InvokeAsync(TopList, 1, 10) //以异步调用为例 总结 一般来说建议在通用的功能上使用View Component的功能这样所有的视图文件都可以放在Views\Shared文件夹了。 同步与推荐 本文已同步至目录索引解读ASP.NET 5 MVC6系列