zoukankan      html  css  js  c++  java
  • ASP.NET Core 5.0 MVC 视图组件的用法

    什么是视图组件

    视图组件与分部视图类似,但它们的功能更加强大。 视图组件不使用模型绑定,并且仅依赖调用时提供的数据。它也适用于 Razor 页。

    视图组件:

    • 呈现一个区块而不是整个响应。
    • 包括控制器和视图间发现的相同关注点分离和可测试性优势。
    • 可以有参数和业务逻辑。
    • 通常从布局页调用。

    视图组件可用于具有可重用呈现逻辑(对分部视图来说过于复杂)的任何位置,例如:

    • 动态导航菜单
    • 标记云(查询数据库的位置)
    • 登录面板
    • 购物车
    • 最近发布的文章
    • 典型博客上的边栏内容
    • 一个登录面板,呈现在每页上并显示注销或登录链接,具体取决于用户的登录状态

    视图组件由两部分组成:类(通常派生自 ViewComponent)及其返回的结果(通常为视图)。

    创建ViewCompont组件类

    创建一个 ViewComponents 文件夹并添加以下 PriorityListViewComponent 类

      public class PriorityListViewComponent :  ViewComponent
        {
            public async Task<IViewComponentResult> InvokeAsync(int maxPriority, bool isDone)
            {
                var items = await GetItemsAsync(maxPriority, isDone);
                return View(items);
            }
            private Task<List<TodoItem>> GetItemsAsync(int maxPriority, bool isDone)
            {
                return Task.Run<List<TodoItem>>(() =>
                {
    
                    return new List<TodoItem>()
                    {
                          new TodoItem(){
                                Id=123,
                                Name="孙思邈",
                                Age=6,
                                Description="药王、妙应真人、孙十常、白山药王 "
                          },
                           new TodoItem(){
                                Id=456,
                                Name="孙思邈",
                                Age=7,
                                Description="药王、妙应真人、孙十常、白山药王 "
                          },
                           new TodoItem(){
                                Id=789,
                                Name="孙思邈",
                                Age=8,
                                Description="药王、妙应真人、孙十常、白山药王 "
                          },
                          new TodoItem(){
                                Id=12,
                                Name="孙思邈",
                                Age=9,
                                Description="药王、妙应真人、孙十常、白山药王"
                          }
                    };
                });
            }
        }
        public class TodoItem
        {
            public int Id { get; set; }
    
            public string Name { get; set; }
    
            public int Age { get; set; }
    
            public string Description { get; set; }
        }

    创建视图组件 Razor 视图

    • 创建 Views/Shared/Components 文件夹。 此文件夹 必须 命名为 Components
    • 创建 Views/Shared/Components/PriorityList 文件夹。 此文件夹名称必须与视图组件类的名称或类名去掉后缀(如果遵照约定并在类名中使用了“ViewComponent”后缀)的名称相匹配。 如果使用了 ViewComponent 属性,则类名称需要匹配指定的属性。
    •    创建 Views/Shared/Components/PriorityList/Default ... Razor view:
    @model IEnumerable<TodoItem>
    
    <h3>Priority Items</h3>
    <ul>
        @foreach (var todo in Model)
        {
            <li>@todo.Name</li>
        }
    </ul>

     使用组件视图

    在详情Index视图上,引用组件视图

    <div>
        @await Component.InvokeAsync("PriorityList", new { maxPriority = 2, isDone = false })
    </div>

     效果图

    !

    • 作       者 : 明志德道
    • 希     望: 如果内容对您有用,动动小手点个赞吧,您的支持就是我持续写作的动力!
    • 声     明1 : 如有错误,欢迎讨论,请勿谩骂^_^。
    • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。
  • 相关阅读:
    随题而学(二)多维数组转一维数组
    随题而学(一)
    谁能破解“无法定位程序输入点ucrtbase.abort与动态链接库api-ms-win-crt-runtime-l1-1-0.dll上”
    虚拟机8—tools安装失败
    win7介绍
    win xp安装
    Linux正则表达式,grep总结,sed用法
    Linux将用户添加到组的指令
    xxx is not in the sudoers file.This incident will be reported.的解决方法
    69-70连接查询
  • 原文地址:https://www.cnblogs.com/for-easy-fast/p/14353554.html
Copyright © 2011-2022 走看看