ASP.NET Core 中的局部视图和视图组件(2)

上篇文章我写了关于部分视图定义和使用方法,并给出了相应的应用场景示例,本文继续局部视图和视图组件中的下半部分,即视图组件,了解视图组件的定义和应用场景,以此分析它们之间的区别。

视图组件(View Components )

视图组件(View Components )是微软公司在 ASP.NET Core MVC 中新引入的功能之一。 它与部分视图非常相似,但与部分视图相比功能非常强大。 视图组件不使用模型绑定。 但是,它仅适用于我们调用它时提供的数据。 与部分视图一样,视图组件也不依赖于控制器。 它有自己的类来实现开发组件模型和 Razor 标记视图页面的逻辑。 最重要的是视图组件可以利用依赖项注入,这使它们非常强大且可测试。视图组件具有以下功能:

  • 视图组件支持SOC(Separation-Of-Concerns,关注分离)
  • 它可以具有自己的业务逻辑和参数
  • 始终从布局页面调用
  • 它总是渲染块而不是整个过程

视图组件可以实现在 Web 应用程序的任何部分,这些部分可能存在一些重复代码的可能性,例如导航窗格,登录面板,菜单,购物车等。因此,简单来说,视图组件实际上就像一个包含业务逻辑和 UI 设计的 Web 部件包,该 Web 部件包可以在 Web 应用程序的多个部分中重用。

因此,当我们想要创建一个标准的 ASP.Net MVC 页面时,它涉及到同时由控制器(Controller)类和视图(View)处理的过程。 与此类似,视图组件也涉及通过视图组件类和视图的处理。视图组件类必须派生自 ViewComponent 类。在ASP.Net Core中,我们有两个过程来声明视图组件。  其一,我们可以创建一个带有名称的类,然后附加 ViewComponent  特性(Attribute),或者通过该特性的名称属性设置视图组件名称,来用 ViewComponent 特性装饰该类。

public class EmployeeViewComponent: ViewComponent 
{ } 
[ViewComponent(Name = "Employee")] 
public class EmployeeInfo: ViewComponent 
{}

我们可以将此类文件存储在应用程序中的任何文件夹中。 但是,由于视图组件的主要功能点,是创建可以在应用程序中的多个位置使用的组件,因此将与视图组件相关的这些文件,放在称为“共享文件(Shared )”夹的视图文件夹中是有意义的。

现在,我们已经创建了视图组件类和视图。 因此,现在将方法添加到我们的类中,并将 Razor 标记置于视图中只是时间问题。 在我们的视图组件类中,我们必须定义一个方法,并且必须是:

  • 名称为 InvokeAsync
  • 必须返回 Task 对象类型给 IViewComponentResult
  • 必须使用异步关键字进行修饰
  • 必须接受单个参数(任何类型)

async 特性负责将我们从 InvokeAsync 方法返回的对象包装在 Task 对象中。 当前,View 方法是 ViewComponent 类中唯一返回类型为IViewComponentResult 的方法。

public async Task InvokeAsync(string EmployeeCode)  
{ 
Employee objEmployee; 
//...retrieve or build Employee object for a specified Employee 
return View(objEmployee); 
}

现在,如果我们不能从 Web 应用程序的任何部分调用该视图组件,则创建视图组件就不多了。因此,要从任何其他视图调用视图组件,我们需要使用@Component. InvokeAsync()  如下所示:

@Component.InvokeAsync("EmployeeViewComponent",<包含参数的匿名类型>)

该参数将传递给 InvokeAsync 方法。 假设我想获取代码为 A001 的员工详细信息。 为此,调用状态将如下所示:

@await Component.InvokeAsync("EmployeeViewComponent", "A001")

视图组件通常从视图中调用。 但是,我们可以从控制器方法中调用视图组件。 尽管视图组件没有定义任何端点(如控制器),但仍然可以轻松实现控制器操作方法,该方法可以返回 ViewComponentResult 的内容,如下例所示:

public IActionResult EmployeeView() 
{ 
 return ViewComponent("EmployeeViewComponent", "A001"); 
}

总结

视图组件是 ASP.NET Core 的重要功能。 它与“部分视图”非常相似。 在本文中,我们讨论了如何在 ASP.NET Core 中创建和使用视图组件。

本文翻译自:https://www.dotnettricks.com/learn/aspnetcore/partial-views-and-view-components

参考资料:

  1. https://docs.microsoft.com/en-us/aspnet/core/mvc/views/partial
  2. https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components

《ASP.NET Core 中的局部视图和视图组件(2)》的相关评论

发表评论

必填项已用 * 标记,邮箱地址不会被公开。