ASP.NET Core MVC学习之视图组件(View Component)
更新时间:2019年08月12日 08:30:31 作者:卡西莫多_Ruby
这篇文章主要给大家介绍了关于ASP.NET Core MVC学习之视图组件(View Component)的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用ASP.NET Core MVC具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
1.视图组件介绍
视图组件是 ASP.NET Core MVC 的新特性,类似于局部视图,但它更强大。视图组件不使用模型绑定,并且仅依赖于调用它时所提供的数据。
视图组件特点:
呈块状,而不是整个响应
包括在控制器和视图之间发现的相同的关注点和可测试性优点
可以拥有参数和业务逻辑
通常从布局页面调用
视图组件可以用在任何需要重复逻辑且对局部视图来说过于复杂的情况,例如:
动态导航菜单
标签云(需要查询数据库)
登录面板
购物车
最近发表的文章
典型博客上的侧边栏内容
将在每个页面上呈现的登录面板,根据用户的登录状态显示注销或者登录的链接
视图组件有两部分组成,类(通常派生自 ViewComponent)和它返回的结果(通常是一个视图)。与控制器一样,视图组件可以是POCO,但大多数是利用 ViewComponent 派生的方法和属性。
2.创建视图组件
(1)视图组件类
一个视图组件类通常可以通过以下任一方式创建:
派生自ViewComponent
使用 [ViewComponent] 属性装饰类,或从具有 [ViewComponent] 属性的类派生
创建一个名称后缀为 ViewComponent 结尾的类
像控制器一样,视图组件必须是 public ,非嵌套和非抽象类。视图组件名称是删除了 ViewComponent 后缀的类名,可以使用 ViewComponentAttribute.Name 属性显示指定。
视图组件类优点:
完全支持构造函数依赖注入
不参与控制器生命周期,这意味着不能在视图组件中使用过滤器
(2) 视图组件方法
视图组件在 InvokeAsync 方法中定义其逻辑,并返回 IViewComponentResult 。参数直接来自视图组件的调用,而不是来自模型绑定。视图组件从不直接处理请求。通常,视图组件通过调用 View 方法初始化模型并将其传递给视图。总之,视图组件有以下特点:
定义一个 InvokeAsync 方法并返回 IViewComponentResult。
通常通过调用 ViewComponent View 方法初始化模型并将其传递给视图。
参数来自调用方法,而不是 HTTP,没有模型绑定。
不能直接作为 HTTP 端点访问,它是从你的代码(通常在视图中)调用的。视图组件不处理请求。
在签名上重载,而不是当前 HTTP 请求的任何细节。
(3) 视图搜索路径
运行时在以下路径搜索视图:
Views/<controller_name>/Components/<view_component_name>/<view_name>
Views/Shared/Components/<view_component_name>/<view_name>
视图组件的默认视图名称是 Default,这意味着你的视图文件通常名为 Default.cshtml。你可以在创建视图组件结果或调用 View 方法时指定其他的视图名称。
3.调用视图组件
要使用视图组件,请从视图中调用 @Component.InvokeAsync(“视图组件名称”,<匿名参数>)。参数将传递到 InvokeAsync 方法。如下:
@await Component.InvokeAsync(“TopicRankList”,new { days=5})
视图组件通常从视图中调用,但也可以从控制器方法中直接调用,虽然视图组件不像控制器那样定义终结点。
public ActionResult Index()
{
return ViewComponent(“TopicRankList”, new { days = 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 = db;
_memoryCache = memoryCache;
}
public IViewComponentResult Invoke(int days)
{
var items = new List<User>();
if (!_memoryCache.TryGetValue(cacheKey, out items))
{
items = GetRankUsers(10, days);
}
_memoryCache.Set(cacheKey,items,TimeSpan.FromMinutes(10));
return View(items);
}
private List<User> GetRankUsers(int top, int days)
{
return _db.User.OrderBy(o => o.Id).Take(top).ToList();
}
}
视图组件类可以在项目的任何文件夹中。 [ViewComponent] 特性可以更改用于引用视图组件的名称,例如,可以命名类为 XYZ,并应用 [ViewComponent] 特性:
[ViewComponent(Name=”UserRankTop”)]
public calss XYZ:ViewComponent
Invoke 方法返回列表,然后创建视图组件视图。
创建 View/Shared/Components 文件夹。这个文件夹必须名为 Components。然后在里面创建 UserRankList 文件夹,添加 Default.cshtml 视图:
@model List<MVCTest.Models.User>
<h2>user</h2>
<div class=”list-group”>
@foreach (var item in Model)
{
<label>@item.Name</label>
}
</div>
最后在视图中调用: @await Component.InvokeAsync(“UserRankList”, new { days=5})
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对华域联盟的支持。
您可能感兴趣的文章:C#敏感词过滤实现方法.NET 开源配置组件 AgileConfig的使用简介vue3.0搭配.net core实现文件上传组件.NET Core 3.0之创建基于Consul的Configuration扩展组件.net core高吞吐远程方法如何调用组件XRPC详解详解.Net Core中的日志组件(Logging)详解.Net core2.0日志组件Log4net、Nlog简单性能测试.Net集成敏感词组件的步骤
core
mvc
视图
相关文章
vs2010显示代码行数的方法这篇文章主要为大家详细介绍了如何在vs2010中显示代码的行数,仅要三步实现代码行数显示,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2016-11-11
ASP.NET(C#)读取Excel的文件内容开发过程中难免会遇到读取Excel文件的情况,本文主要记录读取Excel文件的方法由于本文目的是供自己和各位童鞋日后学习参考,没有考虑过多方面,把所有方法及属性全部放到了一个文件中。 2013-02-02
web.config配置连接字符串的方法在ASP.NET的web.config中,可以用两种方式来写连接字符串的配置,看下面详细配置吧 2013-12-12
asp.net中提示该行已属于另一个表的解决方法从一个TABLE中取一行放到另一个TABLE里报错: 该行已经属于另一个表。用下面来个方法就OK了,需要的朋友可以参考下 2013-09-09
asp.net更新指定记录的方法这篇文章主要介绍了asp.net更新指定记录的方法,涉及针对指定ID调用update语句的方法,是非常实用的技巧,需要的朋友可以参考下 2014-11-11
.net面向对象之多线程(Multithreading)及 多线程高级应用这篇文章主要介绍.net面向对象程序设计阶段多线程Multithreading及多线程高级应用的介绍,需要的朋友可以参考下 2015-07-07
asp.net实现微信公众账号接口开发教程这篇文章主要是一篇关于asp.net实现微信公众账号接口开发教程,感兴趣的小伙伴们可以参考一下 2015-12-12
asp.net实现文件下载的代码asp.net中也需要实现文件的下载,因此下面的方法可以参考下除了第四种不推荐以外,其他的都可以,但是个人感觉分块下载的要好一点。没有仔细测试,所以可能有问题。 2011-02-02
"虚拟路径"…"映射到另一个应用程序,这是不允许原因: 用户控件不能跨虚拟目录调用。
2008-12-12
详解.net core下如何简单构建高可用服务集群一说到集群服务相信对普通开发者来说肯定想到很复杂的事情,这篇文章主要介绍了详解.net core下如何简单构建高可用服务集群,需要的朋友们下面随着小编来一起学习学习吧 2019-01-01
最新评论

评论(0)