龙空技术网

asp.net core基础教程之创建自定义标签助手taghelper

程序迷 170

前言:

今天小伙伴们对“html helper”可能比较珍视,大家都需要剖析一些“html helper”的相关文章。那么小编同时在网上汇集了一些对于“html helper””的相关文章,希望各位老铁们能喜欢,看官们快快来了解一下吧!

介绍

标签助手使我们能够运行服务器端代码来在Razor View中生成HTML,CSS,Javascript代码。在我之前的文章中,我已经谈到了标签助手,表单标签助手和其他常用标签助手。在本文中,我将解释如何在ASP.NET Core MVC中创建自定义标签助手。

使用标签助手,我们可以扩展现有的HTML元素或创建自己的自定义HTML元素。自定义标签助手只是实现ITagHelper接口的类。但是,.NET Core MVC为我们提供了这个接口的实现。

要创建自定义标签助手,第一步是创建一个从“TagHelper”类继承的类。这个类有一个虚拟的方法来生成HTML标签。它包含虚拟方法的同步(Process)和异步(ProcessAsync)实现。

publicvirtual Task ProcessAsync(TagHelperContext context, TagHelperOutput output);

publicvirtualvoid Process(TagHelperContext context, TagHelperOutput output);

根据我们的要求,我们可以实现这两个或两个之一。Process方法(或ProcessAsync)负责生成浏览器呈现的HTML。它接收标签助手实例和TegHelperOuter的上下文,我们可以使用它来读取和更改范围内的标签助手的内容。

在下面的例子中,我创建了一个简单的标签助手,它会在我们提供的文本中生成<my-first-tag-helper> </ my-first-tag-helper>标签助手。

使用HtmlTargetElement属性,我们可以提供一个标签帮手目标。它传递一个属性参数,该参数指定包含名称为“my-first-tag-helper”的HTML属性的HTML元素。它将匹配并处理将要运行的类中的重写方法。

TagHelper

namespace CustomTagHelper.TagHelpers

{

using Microsoft.AspNetCore.Razor.TagHelpers;

using System.Text;

[HtmlTargetElement("my-first-tag-helper")]

publicclass MyCustomTagHelper : TagHelper

{

public string Name { get; set; }

public override void Process(TagHelperContext context, TagHelperOutput output)

{

output.TagName = "CustumTagHelper";

output.TagMode = TagMode.StartTagAndEndTag;

var sb = new StringBuilder();

sb.AppendFormat("<span>Hi! {0}</span>", this.Name);

output.PreContent.SetHtmlContent(sb.ToString());

}

}

}

下一步是将标签助手注册到_ViewImports.cshtml文件中。如果我们在View文件夹的根目录下添加这个文件并注册我们的标签帮助程序,那么它将可用于“查看”文件夹下的所有视图。在这个例子中,我已经注册了“*”,所以它会在程序集中添加所有的标签助手。

_ViewImports.cshtml

@addTagHelper *,CustomTagHelper

接下来,我们需要使用我们的标签帮手进入查看。Visual Studio对标签助手提供了丰富的智能支持。

Index.cshtml

<div class = “row” >

<my-first-tag-helper name = “Jignesh Trivedi” >

</我的 - 第一标签辅助>

</ DIV>

Output

将模型数据传递给标签助手

我们也可以通过创建“ModelExpression”类型的属性,通过模型绑定将模型数据传递给标签帮助器。使用HtmlAttributeName属性,我们可以创建一个友好的属性名称。

ModelExpression描述了一个传递给标签帮助器的模型表达式。使用这个类的Model属性,我们可以得到感兴趣表达的模型对象。

在下面的例子中,我创建了一个标签助手来显示员工的详细信息,例如姓名和职位。在这里,我创建了两个模型表达式的属性:EmployeeName和Designation。在Process方法中,我使用了这些属性并创建了分配给输出的HTML。从视图中,我已经传递了EmployeeViewModel的属性名称,标记助手将评估模型属性的值,以便在需要时使用该值。

Tag Helper

namespace CustomTagHelper.TagHelpers

{

using Microsoft.AspNetCore.Mvc.ViewFeatures;

using Microsoft.AspNetCore.Razor.TagHelpers;

using System.Text;

[HtmlTargetElement("employee-details")]

publicclass EmployeeDetailTagHelper : TagHelper

{

[HtmlAttributeName("for-name")]

public ModelExpression EmployeeName { get; set; }

[HtmlAttributeName("for-designation")]

public ModelExpression Designation { get; set; }

public override void Process(TagHelperContext context, TagHelperOutput output)

{

output.TagName = "EmployeeDetails";

output.TagMode = TagMode.StartTagAndEndTag;

var sb = new StringBuilder();

sb.AppendFormat("<span>Name: {0}</span> <br/>", this.EmployeeName.Model);

sb.AppendFormat("<span>Designation: {0}</span>", this.Designation.Model);

output.PreContent.SetHtmlContent(sb.ToString());

}

}

}

Model

namespace CustomTagHelper.Models

{

using System.ComponentModel.DataAnnotations;

publicclass EmployeeViewModel

{

public string Name { get; set; }

public string Designation { get; set; }

}

}

Controller

public IActionResult Index1()

{

EmployeeViewModel e = new EmployeeViewModel();

e.Name = "Jignesh Trivedi";

e.Designation = "Senior Consultant";

return View(e);

}

View

@model CustomTagHelper.Models.EmployeeViewModel

<div class="row">

<employee-details for-name ="Name"for-designation="Designation"></employee-details>

</div>

Output

我们可以在标签帮助器中使用ViewContext类型来访问View的上下文信息,比如ModelState,HttpContext等。这是通过使用ViewContext属性和类型来完成的,通过声明属性类型到ViewContext并使用ViewContext属性进行注释。如果使用HttpAttributeNotBound属性进行注释,则属性不应绑定到标记助手的HTML属性。

[HtmlAttributeNotBound]

[ViewContext]

public ViewContext ViewContext { get; set; }

我们可以使用ProcessAsync方法异步执行给定上下文的标签助手。这个实现和Process方法是一样的,但是我们可以从这个方法中调用其他的异步方法并且等到它完成。

public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)

{

}

概要

借助标签助手,我们可以扩展现有的元素或创建新的元素。标签助手允许我们创建可重用的属性或元素。标签助手也遵循MVC命名约定(例如 - 控制器)。它为MVC提供了标签助手类的方法和属性。

标签: #html helper