TagHelper使用

谈谈ASP.NET CORE 中Razor Page 的TagHelper【标签助手】常见类型及其详细使用

David Hongyu 2020-03-15 15:42:39 748 收藏 4 原力计划
分类专栏: ASP.NET CORE MVC 文章标签: asp.net
版权

ASP.NET CORE MVC
专栏收录该内容
56 篇文章1 订阅
订阅专栏
一,TagHelper简介
1.概念
TagHelper(标签助手)是asp.net core mvc的新特性,把HTML和服务器内容混合在一起,准确说标签助手使服务器端代码能够参与在Razor文件中创建和呈现HTML元素。

2.究竟什么是TagHelper
在MVC项目中使用过HtmlHelper。比如当需要在View上添加一个导航栏的时候,我们就会添加下面代码到页面上去:

<ol>



<li>@Html.ActionLink("HomeText", "Index", "Home")</li>



</ol>
这里有一些HTML元素li。还有以@开头的一些C#代码,当View解析的时候,这些C#代码会被解析成HTML元素。

<li><a href="/">HomeText</a></li>

当我们用TagHelper,我们同样可以用下面的代码来获得上面同样的效果:

<ol>

<li><a asp-controller="Home" asp-action="Index">HomeText2</a></li>

</ol>
在这里,a元素的属性asp-controller和asp-action并不是HTML5的属性,而是这个TagHelper的属性。

这个其实就是内置的AnchorTagHelper。当然.Net Core内置了很多其他TagHelper。

注意,虽然TagHelper看起来有点像我们之前服务器控件的写法,但是它不是服务器控件(这也是为什么ASP.NET CORE性能优异的原因)。它提供了一个HTML友好的开发体验。使用TagHelper的Razor标记看起来更像标准的HTML。熟悉HTML/CSS/JavaScript的前端设计师可以直接编辑Razor,而不需要学习C#的Razor语法。

3.如何开启TagHelper的使用
在需要使用的View上注册TagHelper。

@addTagHelper [the full type name of taghelper,] the assembly name

第一参数是TagHelper类的全名,当你只需要使用某一个TagHelper时候,你可以在此指定你所用的TagHelper类全名,包括它的NameSpace。

第二个参数是程序集名。

如果你要使用程序集中所有的TagHelpers,可以使用“*”或者省略这一个参数。

@addTagHelper *, Microsoft.AspNet.Mvc.TagHelpers

如果你只希望使用某个TagHelper,如:AnchorTagHelper,那么只需要一下代码:

@addTagHelper Microsoft.AspNet.Mvc.TagHelpers.AnchorTagHelper, Microsoft.AspNet.Mvc.TagHelpers

然后就可以用了,如:

<a asp-controller="Home" asp-action="About">About</a>

当然,如果你想取消某个TagHelper的注册,可以使用removeTagHelper,比如

@removeTagHelper Microsoft.AspNet.Mvc.TagHelpers.AnchorTagHelper, Microsoft.AspNet.Mvc.TagHelpers

一旦TagHelper被取消注册了,其对应的Tag就不能被解析成这种TagHelper了。

说明:如果想在所有的视图文件中都使用TagHelper,那么可以在Shared文件夹下_ViewImports.cshtml文件中引入TagHelper。

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

不过默认是引用好了的哦——【无需自己引用可以直接使用】。

二.常见TagHelper的Tag属性与应用
1.AnchorTagHelper 锚连接
这个TagHelper被应用在所有锚元素<a>上,它拥有以下属性:

asp-action——指定action方法名。

asp-controller——指定controller名。

asp-fragment——指定URL片段名。

asp-host——指定访问的主机(host)名。

asp-protocol——指定访问协议,比如http或者https。

asp-route——指定路由名。

最终这个TagHelper会被解析成具有href属性的锚元素,这个href的内容就是基于以上这些属性的值生成的。

<a asp-action="Create">Create New</a>

2.LabelTagHelper
与HtmlExtension.LabelFor功能一样,它只有一个属性asp-for,用来指定绑定Model里某个字段,很多其他的TagHelpers也具有这个属性。。它作用在label元素上。

<label asp-for="StuName"/>

实际上就会显示绑定的model字段中Display中设置的Name值

 

 

3.InputTagHelper
这个TagHelper被应用在input元素上,与HtmlHelper中的TextBoxForHTML一样,这个TagHelper会生成一个绑定到model中某个字段的Input元素。它支持一下属性:

asp-for——用来指定绑定model某个字段

asp-format——用来设置显示的Format,通常被用来给货币、日期和时间类型的值设置Format

比如,Birthday是model里的一个日期类型的字段。

<input asp-for="Birthday" asp-format="{0:yyyy-MM-dd}"/>

<input asp-for="StuName" class="form-control" />

注意:我们也可以把一个内嵌对象赋给asp-for,比如:

<input asp-for="Address.Street" type="text" />

4.ValidationMessageTagHelper
与HtmlHelper中的ValidationMessageFor一样,这个TagHelper是用来显示验证失败信息。它应用在span元素上,而且只有唯一的一个属性asp-validation-for,被用来指定所验证的对象----Model中某个字段。

<input asp-for="Birthday" asp-format="{0:yyyy-MM-dd}"/>

<span asp-validation-for="Birthday"/>

 

5.ValidationSummaryTagHelper
像HTMLHelper扩展的ValidationSummary一样,它是用来验证错误的汇总信息。它只支持一个属性asp-validation-summary,具有以下几种值:

None——不显示任何验证信息

ModelOnly——只显示Model错误信息,不包括属性错误信息

All——显示所有信息

它应用在div元素上

6.FormTagHelper
与HtmlHelper中的BeginForm一样,它用来生成一个form元素,它应用在form元素上,支持以下属性:

asp-action——

asp-controller——

<form asp-action="Add" method="post">

7.SelectTagHelper
SelectTagHelper作用在Select元素上,支持asp-for和asp-items属性。

asp-for——与我们上面介绍的一样,用来绑定model中某个字段。

asp-items——被用来指定Select元素的Option集合,它的值类型是IEnumerable<SelectListItem>。

<select asp-for="Country" asp-items="ViewBag.Countries"></select>

如果要在Select中添加一个默认选择的项,我们可以这样做:

<select asp-for="Country" asp-items="ViewBag.Countries">

<option selected="selected" value="">Choose Country</option>

</select>

我们可以赋任何类型的IEnumerable<SelectListItem>实例给asp-items,可能是某个变量或者某个实例的一个属性等。

比如:

@{

SelectListItem[] items =

{

new SelectListItem() { Text = "item 1" },

new SelectListItem() { Text = "item 2" }

};

}

<select asp-for="Country" asp-items="items"></select>

8.OptionTagHelper
应用在option元素上,和select元素一起使用,通常被用来读取option元素信息,而不改变元素内容。唯一可能修改的是在有的情况下,会根据父亲select元素将option的selected状态设成"selected"。

<select asp-for="Country" asp-items="ViewBag.Countries">

<option selected="selected" value="">Choose Country</option>

</select>

9.TextAreaTagHelper
应用在textarea元素上,目前只支持唯一一个属性asp-for

<textarea asp-for="Discription"></textarea>

10.LinkTagHelper
应用在link元素上,支持备用的样式文件。它具有以下属性:

href——指定样式资源的链接地址。

asp-href-include——指定所有需要被加载的样式文件路径,当有多个时,以逗号来分隔每一个;这里的路径是相对于应用程序中wwwroot的相对路径。

asp-href-exclude——指定那些不需要被加载的样式文件路径,当有多个时,以逗号来分隔每一个;这里的路径是相对于应用程序中wwwroot的相对路径。

asp-fallback-href——指定备用资源链接地址。

asp-fallback-href-include——指定所有需要被加载的备用样式文件路径,当有多个时,以逗号来分隔每一个;这里的路径是相对于应用程序中wwwroot的相对路径。

asp-fallback-href-exclude——指定那些不需要被加载的备用样式文件路径,当有多个时,以逗号来分隔每一个;这里的路径是相对于应用程序中wwwroot的相对路径。

asp-fallback-test-class——用来检测加载失败的样式名。

asp-fallback-test-property——用来检测资源加载失败所用的测试属性。

asp-fallback-test-value——用来检测资源加载失败所用的测试值。

asp-file-version——bool值,用来指定是否需要将文件版本信息加入到url地址中。

例如,在下面例子中,当从网络上(http://ajax.aspnetcdn.com/ajax/bootstrap-touch-carousel/0.8.0/css/bootstrap-touch-carousel.css)加载样式文件失败时,加载本地相应的样式文件(~/lib/bootstrap-touch-carousel/css/bootstrap-touch-carousel.css)。通过检测样式类carousel-caption中display属性是否是none来判断网络上样式文件是否加载成功。

<link rel="stylesheet"

href="//ajax.aspnetcdn.com/ajax/bootstrap-touch-carousel/0.8.0/css/bootstrap-touch-carousel.css"

asp-fallback-href="~/lib/bootstrap-touch-carousel/css/bootstrap-touch-carousel.css"

asp-fallback-test-class="carousel-caption"

asp-fallback-test-property="display"

asp-fallback-test-value="none" />

11.EnvironmentTagHelper
应用在environment元素上,根据不同names的设置呈现不同的内容。它支持以下属性:

names——指定环境名,当有多个时候以逗号分隔。这里判断的依据是,读取IHostingEnvironment的EnvironmentName的值,与environment元素中的names匹配,当匹配上的时候就呈现出里面的内容,否则移除该environment元素。

在很多情况下,我们想在开发环境使用一套配置信息,在生产环境又是另外一套,这时候就需要使用条件判断语句了,不过在新版的MVC中,使用EnvironmentTagHelper提供的Environment元素标签就可以了,示例如下:

<environment names="Development">

<link rel="stylesheet" href="~/lib2/bootstrap/dist/css/bootstrap.css" />

<link rel="stylesheet" href="~/css/site.css" />

</environment>

<environment names="Staging,Production">

<link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"

asp-fallback-href="~/lib2/bootstrap/dist/css/bootstrap.min.css"

asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />

<link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />

</environment>
在上述代码中,我们定于,如果是Development环境就使用本地的js文件,否则(Staging或Production环境)就使用网络上的css文件。asp-append-version="true"为静态文件提供唯一版本号。

12.ScriptTagHelper
应用在script元素上,和LinkTagHelper一样,它也具有fallback功能, 只不过这里判断的不是class样式,而是用来判断默认的js文件是否加载成功。

它支持以下属性:

src指定要加载的js源地址。

asp-src-include指定要加载的js文件,当有多个文件时以逗号分隔。这里文件路径是相对于程序webroot的相对路径。

asp-src-exclude指定不需要加载的js文件,当有多个文件时以逗号分隔。这里文件路径是相对于程序webroot的相对路径。

asp-fallback-src指定备用的js源地址。

asp-fallback-src-include指定需要加载的备用js文件,当有多个文件格式时以逗号分隔。这里文件路径是相对于程序webroot的相对路径。

asp-fallback-src-exclude指定不需要加载的备用js文件,当有多个文件时以逗号分隔。这里文件路径是相对于程序webroot的相对路径。

asp-file-version——bool值,用来指定是否需要将文件版本信息加入到url地址中。

<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.10.2.min.js"

asp-fallback-src="~/lib/jquery/jquery.min.js">

</script>

此外,还可以根据需要自定义TagHelper。
————————————————
版权声明:本文为CSDN博主「David Hongyu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41372626/article/details/104879425

上一篇:CircuitBreaker断路器Fallback如何获取异常


下一篇:Hystrix 实战经验分享