📜  ASP.NET Core-Razor标记助手(1)

📅  最后修改于: 2023-12-03 15:29:29.907000             🧑  作者: Mango

ASP.NET Core-Razor标记助手介绍

ASP.NET Core是一个开源框架,它是基于.NET Core的。Razor是ASP.NET Core中的一种标记语言,它使得我们能够把HTML和C#代码混合在一起来创建视图。标记助手则是一种C#类,它们可以让我们更容易地和Razor视图交互。

Razor标记助手简介

Razor标记助手(Razor Tag Helpers)是一种C#类,它们可以和Razor视图协同工作,从而创建动态的HTML。Razor标记助手适用于许多标准HTML标签(如 <form>、<input>、<div> 等),它们可以让我们更方便地构建HTML元素,同时保留我们优雅的C#语法。

在ASP.NET Core中,Razor标记助手担任了很多任务,如:

  • 渲染模型数据
  • 创建表单
  • 提供URL链接
  • 跟踪用户和其他一些辅助任务
Razor标记助手的使用

使用Razor标记助手非常简单。我们可以在Razor视图文件里使用类似标签的语法来创建标记助手。例如:

<form asp-action="Create" asp-controller="Home" method="post">
    <div class="form-group">
        <label asp-for="UserName"></label>
        <input asp-for="UserName" class="form-control" />
        <span asp-validation-for="UserName" class="text-danger"></span>
    </div>
    <div class="form-group">
        <label asp-for="Password"></label>
        <input asp-for="Password" class="form-control" />
        <span asp-validation-for="Password" class="text-danger"></span>
    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
</form>

在这个例子中,我们使用了 <form>、<input> 和 <label> 标记助手来创建一个表单。这三个标记助手分别对应原生的 <form>、<input> 和 <label> 标签。同时我们还使用了 asp-for 和 asp-validation-for 标记助手来绑定模型数据。

自定义标记助手

ASP.NET Core允许我们创建我们自己的标记助手。我们可以在应用程序中添加自定义的标记助手,以便我们更好地满足自己的需求,写出更加优雅的视图代码。

我们可以通过继承“TagHelper”类来创建自己的标记助手。例如:

[HtmlTargetElement("custom")]
public class CustomTagHelper : TagHelper
{
    public override void Process(TagHelperContext context, TagHelperOutput output)
    {
        output.TagName = "div";
        output.Attributes.SetAttribute("class", "custom");
        output.Content.Append("This is a custom tag helper.");
    }
}

在这个例子中,我们为了创建一个名为“custom”自定义标记,继承了“TagHelper”类。这个标记助手将会渲染成一个简单的 <div> 元素。我们把“class”属性设置成了“custom”,并且在元素里面添加了一段简单的文本。我们使用了“HtmlTargetElement”特性来告诉ASP.NET Core,这个标记助手是应该用来处理什么标记的。

接下来,我们可以在Razor视图中使用这个自定义标记:

<custom></custom>
总结

Razor标记助手可以提供简易而灵活的方式来创建动态HTML视图。它们是与Razor视图交互的一种C#类。我们可以使用标记助手来简化我们的Razor视图代码,并且可以通过创建自己的标记助手来满足我们自己的需求。