ASP。净MVC核心之视图组件怎么用

  介绍

这篇文章主要为大家展示了ASP。净MVC核心之视图组件怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“ASP。净MVC核心之视图组件怎么用”这篇文章吧。

<强> 1。视图组件介绍

视图组件是ASP。净MVC核心的新特性,类似于局部视图,但它更强大。视图组件不使用模型绑定,并且仅依赖于调用它时所提供的数据。

视图组件特点:

呈块状,而不是整个响应

包括在控制器和视图之间发现的相同的关注点和可测试性优点

可以拥有参数和业务逻辑

通常从布局页面调用

视图组件可以用在任何需要重复逻辑且对局部视图来说过于复杂的情况,例如:

动态导航菜单

标签云(需要查询数据库)

登录面板

购物车

最近发表的文章

典型博客上的侧边栏内容

将在每个页面上呈现的登录面板,根据用户的登录状态显示注销或者登录的链接

视图组件有两部分组成,类(通常派生自ViewComponent)和它返回的结果(通常是一个视图)。与控制器一样,视图组件可以是少,但大多数是利用ViewComponent派生的方法和属性只

<强> 2。创建视图组件

(1)视图组件类

一个视图组件类通常可以通过以下任一方式创建:

派生自ViewComponent

使用[ViewComponent]属性装饰类,或从具有[ViewComponent]属性的类派生

创建一个名称后缀为ViewComponent结尾的类

像控制器一样,视图组件必须是公共的,非嵌套和非抽象类。视图组件名称是删除了ViewComponent后缀的类名,可以使用ViewComponentAttribute。名字属性显示指定。

视图组件类优点:

完全支持构造函数依赖注入

不参与控制器生命周期,这意味着不能在视图组件中使用过滤器

(2)视图组件方法

视图组件在InvokeAsync方法中定义其逻辑,并返回IViewComponentResult。参数直接来自视图组件的调用,而不是来自模型绑定。视图组件从不直接处理请求。通常,视图组件通过调用视图方法初始化模型并将其传递给视图。总之,视图组件有以下特点:

定义一个InvokeAsync方法并返回IViewComponentResult。

通常通过调用,ViewComponent视图方法初始化模型并将其传递给视图。

参数来自调用方法,而不是HTTP,没有模型绑定。

不能直接作为HTTP端点访问,它是从你的代码(通常在视图中)调用的。视图组件不处理请求。

在签名上重载,而不是当前HTTP请求的任何细节。

(3)视图搜索路径

运行时在以下路径搜索视图:

视图/& lt; controller_name>/组件/& lt; view_component_name>/& lt; view_name>

视图/共享/组件/& lt; view_component_name>/& lt; view_name>

视图组件的默认视图名称是违约,这意味着你的视图文件通常名为违约。cshtml。你可以在创建视图组件结果或调用视图方法时指定其他的视图名称。

<强> 3。调用视图组件

,要使用视图组件,请从视图中调用,@Component.InvokeAsync(“视图组件名称“,& lt;匿名参数祝辞)。参数将传递到InvokeAsync方法。如下:

@await  Component.InvokeAsync (“TopicRankList" new {,天=5})

视图组件通常从视图中调用,但也可以从控制器方法中直接调用,虽然视图组件不像控制器那样定义终结点。

,,,,,,,公共ActionResult指数()
,,,,,,,{
,,,,,,,,,,,返回ViewComponent (“TopicRankList"、新{天=5});
,,,,,,,}
,

<强> 4。实战视图组件

添加一个ViewCompoents文件夹,然后添加UserRankList类:

public  class  UserRankList : ViewComponent   ,{   private 才能readonly  DataContext  _db;   private 才能;IMemoryCache  _memoryCache;   private 才能string  cacheKey =,“topicrank";      public 才能;UserRankList (DataContext  db, IMemoryCache  memoryCache)   {才能=,,_db ;数据库;   ,,_memoryCache =, memoryCache;   ,,}      public 才能;IViewComponentResult 调用(int 天)   {才能   ,,var  items =, new  List ();   ,,if  (! _memoryCache.TryGetValue (cacheKey, out 项目))   ,,{   ,,,items =, GetRankUsers(10,天);   ,,}   ,,_memoryCache.Set (cacheKey、物品TimeSpan.FromMinutes (10));   ,,return 视图(项目);   ,,}      private 才能;List< User>, GetRankUsers (int ,, int 天)   {才能   ,,return  _db.User.OrderBy (o =祝辞,o.Id)(上),.ToList ();   ,,}   以前,}

ASP。净MVC核心之视图组件怎么用