如何在ASP.NET Core中使用ViewComponent

 更新时间:2021年04月14日 09:35:09   作者:HueiFeng  
这篇文章主要介绍了如何在ASP.NET Core中使用ViewComponent,帮助大家更好的理解和学习使用.net技术,感兴趣的朋友可以了解下

前言

在之前的开发过程中,我们对于应用或者说使用一些小的组件,通常使用分布页(partial view),再往前在Web Form中我们会进行应用WEB Control,好吧提及一个关键性代码TagPrefix:TagName,通过这种的标记我们便可以在我们web form中进行引入我们的组件,当然自从.NET MVC之后呢,就已经没有了WebControl,而对于.NET Core后,又多了一个特性ViewComponent

对于ViewComponent看起来它类似于小的控制器,而对于我们小的组件或者小部分通用型功能,可通过ViewComponent进行实现,比如说留言栏、菜单等等。

ViewComponent是由两部分组成,一部分是类(通常该类集成与ViewComponent),而另外一部分是视图(Razor和普通的View一样),当然ViewComponent同样也支持POCO,不继承ViewComponent,但类名以ViewComponent结尾。

自定义一个组件

创建ViewComponent的方式有三种,如下所示:

  • 继承自ViewComponent
  • 使用ViewComponent特性
  • 创建一个类,以ViewComponent结尾

需要注意的是View Component必须是公共的(public),非嵌套,非抽象类。

对于View Component我们有了一个基本的认识,下面的话创建一个ButtonViewComponent示例,作为我们的参考:

using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;

namespace ViewComponentDemo.ViewComponents
{
    public class ButtonViewComponent : ViewComponent
    {
        public async Task<IViewComponentResult> InvokeAsync()
        {
            return View();
        }
    }
}

在视图页面中调用该组件:

@await Component.InvokeAsync("Button")

对于ViewComponent同样也是跟Controller一样,进行通过我们服务端特性进行视图操作,再或者说渲染,比如下面我们要传递参数,进行修改我们的Button的样式:

我们修改一下原方法,同时增加一个Enum类型,进行样式的选择

@await Component.InvokeAsync("Button",ButtonType.Success)
 public async Task<IViewComponentResult> InvokeAsync(ButtonType type = ButtonType.Success)
 {
        ViewBag.Type = type;
        //return View("name",model);//允许强类型
        return View();
 }
 
    public enum ButtonType
    {
        Default,
        Primary,
        Success,
        Info,
        Warning,
        Danger,
        Link
    }

ViewComponent特性

因为在我们的视图关系绑定中,我们更多的是依赖于命名式绑定,而当我们组件的命名与类命名不一致时,会导致我们搜索不到相关的视图,当然我们可能会在使用过程中对其应用不一样的Name,而对于这种情况,我们可以使用ViewCompoentAttribute
进行标记,通过这种方式我们可进行视图的绑定,如下所示:

    [ViewComponent(Name ="Button")]
    public class ButtonTest : ViewComponent
    {
        public async Task<IViewComponentResult> InvokeAsync(ButtonType type = ButtonType.Success)
        {
            ViewBag.Type = type;
            return View();
        }
    }

如上代码虽然ButtonTest的命名引发了视图绑定失败(不能进行使用Button),而我们将其加入一个标记,将Name命名为Button这样弥补了我们命名的不一致行为。

Taghelper方式

通过@addTagHelper指定进行注册包含组件的程序集,组件位于ViewComponentDemo程序集中

@addTagHelper *, ViewComponentDemo

切记这种方式有一个弊端,参数不是可选性参数,也就是你必须把每一个参数都进行显示的调用一下,否则将导致搜索不到.

<vc:button type="@ButtonType.Success"></vc:button>

在如上代码中type为我们的方法参数。

Reference

Demo:https://github.com/hueifeng/BlogSample/tree/master/src/ViewComponentDemo

以上就是如何在ASP.NET Core中使用ViewComponent的详细内容,更多关于ASP.NET Core中使用ViewComponent的资料请关注脚本之家其它相关文章!

相关文章

  • 使用DataTable.Select 方法时,特殊字符的转义方法分享

    使用DataTable.Select 方法时,特殊字符的转义方法分享

    常见的特殊字符 基本都能转义 ,不知道还有没有漏掉的 ,目前使用正常 ,有需要的朋友可以参考一下
    2013-10-10
  • .NET使用Collections.Pooled提升性能优化的方法

    .NET使用Collections.Pooled提升性能优化的方法

    这篇文章主要介绍了.NET使用Collections.Pooled性能优化的方法,今天要给大家分享类库Collections.Pooled,它是通过池化内存来达到降低内存占用和GC的目的,另外也会带大家看看源码,为什么它会带来这些性能提升,一起通过本文学习下吧
    2022-05-05
  • .NET垃圾回收器原理及使用

    .NET垃圾回收器原理及使用

    这篇文章介绍了.NET垃圾回收器原理及使用方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-01-01
  • 在阿里云函数计算上部署.NET Core 3.1的方法

    在阿里云函数计算上部署.NET Core 3.1的方法

    这篇文章主要介绍了在阿里云函数计算上部署.NET Core 3.1的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • ASP.NET mvc4中的过滤器的使用

    ASP.NET mvc4中的过滤器的使用

    本篇文章主要介绍了ASP.NET mvc4中的过滤器的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • ASP.NET Core快速入门之实战篇

    ASP.NET Core快速入门之实战篇

    这篇文章主要介绍了ASP.NET Core快速入门之实战篇,对跨平台框架感兴趣的同学,可以参考下
    2021-04-04
  • ASP.NET Core使用NLog记录日志

    ASP.NET Core使用NLog记录日志

    这篇文章介绍了ASP.NET Core使用NLog记录日志的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-03-03
  • .net core 删除字符串最后一个字符的七大类N种实现方式(总结篇)

    .net core 删除字符串最后一个字符的七大类N种实现方式(总结篇)

    本文详细介绍了七大类、N种不同的方法来删除字符串的最后一个字符,涵盖了从简单的字符串方法到使用StringBuilder、数组操作、Linq以及正则表达式等多种技术手段,本文给大家介绍.net core删除字符串最后一个字符,感兴趣的朋友一起看看吧
    2024-10-10
  • asp.net 数据库连接池浅析

    asp.net 数据库连接池浅析

    asp.net是默认支持连接池的,所以关于张方面的介绍和谈论都比较少,查了一下msdn,有一下知识
    2010-03-03
  • .Net中如何将一个实例的内存二进制内容读出来(超简单方法)

    .Net中如何将一个实例的内存二进制内容读出来(超简单方法)

    这篇文章主要介绍了如何将一个实例的内存二进制内容读出来(超简单方法),接下来的内容中,我们将利用一个简单的方法输出指定实例的字节序列,并此次分析值类型和引用类型实例在内存的布局,需要的朋友可以参考下
    2023-07-07

最新评论