.NET5 MVC6 ViewComponent简单使用

作者:outlela  来源:本站原创   发布时间:2021-1-27 8:27:23

.NET5 MVC6 提供两种自定义UI扩展方式:

一种是自定义HTML标签的方式:使用TagHelpers(标签),上一章中已经讲过

第二种是返回自定义内容的方式:使用ViewComponent(组件)


本次进行简单入门讲解的是:ViewComponent


一、首先来看看我自定义的组件:

    public class TableTopViewComponent : ViewComponent
    {
        public async Task<IViewComponentResult> InvokeAsync(PageModel page, List<ButtonEnum> button = null, List<SelectEnum> select = null)
        {
            var btn = button ?? new List<ButtonEnum>();
            var slt = select ?? new List<SelectEnum>();

            ViewBag.btn = btn;
            ViewBag.slt = slt;
            return View("TableTop", page);
        }
    }

注意:生成的视图文件位置必须在以下3个位置:

  • /Views/{Controller Name}/Components/{View Component Name}/{View Name}

  • /Views/Shared/Components/{View Component Name}/{View Name}

  • /Pages/Shared/Components/{View Component Name}/{View Name}

  • 本案例放在如图所示:

  • image.png

  • 在return View("TableTop", page)语句中,红字则为视图文件(.cshtml)的前缀名!!!若不指定,则生成的文件名是Default.cshtml。

二、对应的Razor页面(cshtml)代码:

@{
    List<ButtonEnum> button = ViewBag.btn;
    List<SelectEnum> select = ViewBag.slt;
}
<div class="row dataTables_opts" style="padding: 0 0 .55em;">
    <div class="col-md-5">
        <label>每页显示:</label>
        <select class="form-control d-inline w-auto" asp-for="PageSize">
            <option value="2">2</option>
            <option value="10">10</option>
            <option value="20">20</option>
            <option value="35">35</option>
            <option value="50">50</option>
            <option value="100">100</option>
        </select>
        <label>行</label>
    </div>
    <div class="col-md-5">
        @if (button.Any() && button.Count > 0)
        {
            foreach (var btn in button)
            {
                var desc = btn.GetEnumDescription();
                switch (btn)
                {
                    case ButtonEnum.AddRole:
                        <add-button url="@Url.Action("RoleModify","Auth")" title="@desc"></add-button>
                        break;


                    case ButtonEnum.AddMenu:
                        <add-button url="@Url.Action("MenuModify","Auth")" title="@desc"></add-button>
                        break;
                    case ButtonEnum.AddUser:
                        <a asp-action="" asp-controller="User" class="btn btn-primary">
                            @desc
                            <i class="icon-circle-with-plus"></i>
                        </a>
                        break;
                    case ButtonEnum.AddPromote:
                        <add-button url="@Url.Action("Modify","Promote")" title="@desc"></add-button>
                        break;
                    case ButtonEnum.AddAuthInfo:
                        <add-button url="@Url.Action("QualiModify","Merchant")" title="@desc"></add-button>
                        break;
                    case ButtonEnum.AddShop:
                        <add-button url="@Url.Action("ShopModify","Merchant")" title="@desc"></add-button>
                        break;
                    case ButtonEnum.AddPraise:
                        <add-button url="@Url.Action("ModifyComment","Praise")" title="@desc"></add-button>
                        break;
                    case ButtonEnum.AddProduct:
                        <add-button url="@Url.Action("ProductModify","Manage")" title="@desc"></add-button>
                        break;
                    case ButtonEnum.AddCoupon:
                        <add-button url="@Url.Action("CouponModify","Manage")" title="@desc"></add-button>
                        break;
                    case ButtonEnum.DrawCoupon:
                        <add-button url="@Url.Action("DrawCoupon","Merchant")" title="@desc"></add-button>
                        break;
                }
            }
        }
    </div>
    <div class="col-md-2">
        <input type="text" class="form-control d-inline" asp-for="Key" placeholder="输入关键字,回车进行查询……" />
    </div>
</div>

这部分不用多讲,就是常规的Razor页面代码,注重提一下其中的add-button标签则为上一讲中的TagHelper

三、Razor页面(cshtml)调用方法:

@await Component.InvokeAsync("TableTop", new { page, button = new List<ButtonEnum>() { ButtonEnum.AddUser } })

注意:引号里面的值则为组件的名称,须保持一致!!!

四、最终效果:

image.png

如紫色圈出的部分,整个表头即是上面的组件展现出来的,表尾的条数及页码显示也是一个组件,这样的好处就是代码利用率大大提高,使页面内容更少更整洁更易维护,没用上的小伙伴赶快用起来吧,相当的好用!!

*本文最后修改于:2021-1-27 9:0:24
本文标签: .NET5 MVC6 ViewComponent 组件
本文由本站原创发布, 本文链接地址:https://outlela.com/Code/107.html
转载或引用请保留地址并注明出处:outlela.com