一、组成:

一个视图组件包括两个部分,派生自ViewComponent的类及其返回结果。类似控制器。

定义一个视图组件,如控制器一样,必须是公开,非嵌套,非抽象的类。一般,视图组件名称为类名去掉”ViewComponent“后缀。也可通过ViewComponentAttribute.Name属性进行明确指定。

二、视图组件方法:

在InvokeAsync/Invoke方法中定义逻辑,并返回IViewComponentResult。参数可直接来源于视图组件间调用,通过匿名类属性进行传递。

三、视图组件搜索路径:

运行时对视图搜索路径如下:

Views/Components/

Views/Shared/Components

视图组件默认名称为Default,通过可默认命名为Default.cshtml;或可指定视图名称,在调用View方法返回时,将名称一同返回。

四、视图组件调用:

1.从视图中调用

@Component.Invoke("视图组件名",<匿名类型参数>)。或@await Component.InvokeAsync("视图组件名",<匿名类型参数>)。

2.从控制器直接调用:

直接在Action中返回,return ViewComponent("视图组件名称", new {arg0=xx,arg1=xxx});的形式调用。

五、简单示例:

通过创建一个视图组件,返回前n个标识,进行显示。

视图组件类:(则该视图名称为”TopTags“)

  1. namespace ViewComponentAbout.Components
  2. {
  3. public class TopTagsViewComponent : ViewComponent
  4. {
  5. private readonly ITagService _tagService;
  6.  
  7. public TopTagsViewComponent(ITagService tagService)
  8. {
  9. _tagService = tagService;
  10. }
  11.  
  12. public IViewComponentResult Inovke(int count)
  13. {
  14. var tags = _tagService.LoadTopTags(count);
  15. var models = tags.Select((tag) =>
  16. new TagViewModel
  17. {
  18. Id = tag.Id,
  19. Name = tag.Name
  20. });
  21. return View(models);
  22. }
  23.  
  24. public async Task<IViewComponentResult> InvokeAsync(int count)
  25. {
  26. var tags = await _tagService.LoadTopTagsAsync(count);
  27. var models = tags.Select((tag) =>
  28. new TagViewModel
  29. {
  30. Id = tag.Id,
  31. Name = tag.Name
  32. });
  33. return View(models);
  34. }
  35. }
  36. }

数据来源Services:

  1. namespace ViewComponentAbout.Services
  2. {
  3. public interface ITagService
  4. {
  5. IEnumerable<Tag> LoadTopTags(int count);
  6. Task<IEnumerable<Tag>> LoadTopTagsAsync(int count);
  7. }
  8. }
  9.  
  10. namespace ViewComponentAbout.Services
  11. {
  12. public class TagService : ITagService
  13. {
  14. private static Func<List<Tag>> _tags = () =>
  15. {
  16. var tags = new List<Tag>();
  17. for (int i = ; i < ; ++i)
  18. {
  19. tags.Add(new Tag { Id = $"No.{i}", Name = $"Tag{i}", Description = "Tag entity", CreatedOn = DateTime.Now });
  20. }
  21. return tags;
  22. };
  23.  
  24. public IEnumerable<Tag> LoadTopTags(int count)
  25. {
  26. return _tags().Take(count);
  27. }
  28.  
  29. public async Task<IEnumerable<Tag>> LoadTopTagsAsync(int count)
  30. {
  31. return await Task.Run(() => _tags().Take(count));
  32. }
  33. }
  34. }

实体:

  1. namespace ViewComponentAbout.Entities
  2. {
  3. public class Tag
  4. {
  5. public string Id { get; set; }
  6. public string Name { get; set; }
  7. public DateTime CreatedOn { get; set; }
  8. public string Description { get; set; }
  9. }
  10. }

ViewModel:

  1. namespace ViewComponentAbout.ViewModels
  2. {
  3. public class TagViewModel
  4. {
  5. public string Id { get; set; }
  6. public string Name { get; set; }
  7. }
  8. }

视图组件页面:(位于/Views/Shared/Components/TopTags/Default.cshtml

  1. @model IEnumerable<ViewComponentAbout.ViewModels.TagViewModel>
  2.  
  3. <style>
  4. ul li {color:purple;font-style:italic;}
  5. </style>
  6.  
  7. @if(Model.Any())
  8. {
  9. <ul>
  10. @foreach(var tag in Model)
  11. {
  12. <li>
  13. [@tag.Id] @tag.Name
  14. </li>
  15. }
  16. </ul>
  17. }

Startup中,在ConfigureServices添加服务注入:

  1. services.AddSingleton<ITagService, TagService>();

在Index.cshtml页面中,使用如下:

  1. @await Component.InvokeAsync("TopTags", new { count = })

效果:


创建一个命名视图组件:

获取前10个Tag数据,如:(视图名:Top10Tags)

  1. namespace ViewComponentAbout.Components
  2. {
  3. public class Top10TagsViewComponent : ViewComponent
  4. {
  5. private readonly ITagService _tagService;
  6.  
  7. public Top10TagsViewComponent(ITagService tagService)
  8. {
  9. _tagService = tagService;
  10. }
  11.  
  12. public IViewComponentResult Inovke()
  13. {
  14. var tags = _tagService.LoadTopTags();
  15. var models = tags.Select((tag) =>
  16. new TagViewModel
  17. {
  18. Id = tag.Id,
  19. Name = tag.Name
  20. });
  21. return View("TagComponentName", models);
  22. }
  23.  
  24. public async Task<IViewComponentResult> InvokeAsync()
  25. {
  26. var tags = await _tagService.LoadTopTagsAsync();
  27. var models = tags.Select((tag) =>
  28. new TagViewModel
  29. {
  30. Id = tag.Id,
  31. Name = tag.Name
  32. });
  33. return View("TagComponentName", models);
  34. }
  35. }
  36. }

组件视图页面:(位于 /Views/Shared/Components/Top10Tags/TagComponentName.cshtml

  1. @model IEnumerable<ViewComponentAbout.ViewModels.TagViewModel>
  2.  
  3. <style>
  4. ul li {color:purple;font-style:italic;}
  5. </style>
  6. There is only 10 tags in the component.
  7. @if(Model.Any())
  8. {
  9. <ul>
  10. @foreach(var tag in Model)
  11. {
  12. <li>
  13. [@tag.Id] @tag.Name
  14. </li>
  15. }
  16. </ul>
  17. }

调用:

  1. @await Component.InvokeAsync("Top10Tags")

效果:

asp.net core视图组件(ViewComponent)简单使用的更多相关文章

  1. Asp.Net core 视图组件ViewComponent

    视图组件 ViewComponent 最近用了一下视图组件,还挺方便的,如果遇到公共的部分,可以抽出来,写成视图组件,方便调用 先上图看一下效果:比如首页的4个画红框的地方是4个模块,有些地方可能要重 ...

  2. [转]asp.net core视图组件(ViewComponent)简单使用

    本文转自:http://www.cnblogs.com/dralee/p/6170496.html 一.组成: 一个视图组件包括两个部分,派生自ViewComponent的类及其返回结果.类似控制器. ...

  3. asp.net core 视图组件(转)

    介绍视图组件 视图组件是 ASP.NET Core MVC 中的新特性,与局部视图相似,但是它们更加的强大.视图组件不使用模型绑定,只取决于调用它时所提供的数据.视图组件有以下特点: 渲染一个块,而不 ...

  4. 笔记: ASP.NET Core视图组件

    视图组件 asp.net core mvc 提供了部分视图的新替代品:视图组件. 视图组件与分布视图的主要区别在于视图组件与控制器不相关.可使用在独立于单个控制器的场景,如:菜单导航.侧边栏.分页栏等 ...

  5. asp.net core 视图组件化

    视图组件可以通过partial view或viewcomponent实现 partialview https://docs.microsoft.com/zh-cn/aspnet/core/mvc/vi ...

  6. .Net Core使用视图组件(ViewComponent)封装表单文本框控件

    实例程序的界面效果如下图所示: 在表单中的搜索条件有姓名,学号,成绩.他们在一行中按照水平三等分排列. 在cshtml中用html实现上述表单效果的的代码如下: <form class=&quo ...

  7. ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 视图 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 视图 花了几章节,终于把 ASP.NET Core MVC 中的 C 控 ...

  8. ASP.NET CORE 自定义视图组件(ViewComponent)注意事项

    *红色字体为固定命名,蓝色为一般命名规则,黄色为ASP.NET CORE 默认查找文件名 概要:1.简单ViewComponent的用法 2.ViewComponent控制器返回值  3.注意事项 1 ...

  9. Blazor入门:ASP.NET Core Razor 组件

    目录 关于组件 组件类 静态资产 路由与路由参数 组件参数 请勿创建会写入其自己的组参数属性的组件 子内容 属性展开 任意参数 捕获对组件的引用 在外部调用组件方法以更新状态 使用 @ 键控制是否保留 ...

随机推荐

  1. Arcgis, ArcEngine, Arcgis Server使用开发汇总 索引

    ArcGIS系列软件license及安装: Arcgis SDE10.1 和 Arcgis server10.1的授权文件license tnt_esri.dat Arcgis8.1安装license ...

  2. OpenStack三种类型的NAT转换

    SNAT SNAT即源网络地址转换,这个NAT路由修改IP包包头中的源IP地址.SNAT功能通常用于让只具有私有IP地址的主机能够访问外网,比如,多个PC使用路由器共享上网,每个PC都配置了内网IP, ...

  3. 常见ES5方法

    • ES5 JSON扩展JSON.parseJSON.stringify • ES5 Object扩展Object.createObject.keys • Date对象Date.now • ES5 F ...

  4. 【转】 jquery遍历json数组方法

    $(function () { var tbody = ""; //------------遍历对象 .each的使用------------- //对象语法JSON数据格式(当服 ...

  5. JavaScript 智能社 拖拽

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  6. java环境变量以及jdk、jre、jvm

    一.jdk,jre,jvm的了解:jdk全称java development kit即java开发工具包,是整个java的核心,包含了java运行环境jre.java工具包和java的基础类库: jr ...

  7. db2、Oracle存储过程引号用法

      在存储过程中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解     1.从第二个单引号开始被视为转义符,如果第二个 ...

  8. SpringMvc核心流程以及入门案例的搭建

    1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...

  9. Hibernate连接mysql数据库的配置

    <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hi ...

  10. JS利用取余实现toggle多函数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...