AJax技术

解读ASP.NET 5 MVC6系列教程(13):TagHelper

字号+ 作者:H5之家 来源:H5之家 2016-07-02 12:01 我要评论( )

在新版的MVC6中,微软提供了强大的TagHelper功能,以便让我们摆脱如下的臃肿代码: @Html.LabelFor(model = model.FullName)@Html.EditFor(model = model.FullNa

在新版的MVC6中,微软提供了强大的TagHelper功能,以便让我们摆脱如下的臃肿代码:

@Html.LabelFor(model => model.FullName) @Html.EditFor(model => model.FullName) @Html.ValidationMessageFor(model => model.FullName)

引入新功能TagHelper以后,我们只需要这样定义就可以了,代码如下:

@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers" /* 这里需要首先引用TagHelper所在的命名空间 */ <label asp-for="FullName"></label> <div> <input asp-for="FullName" /> <span asp-validation-for="FullName"></span> </div>

这种方式,抛去了服务器端代码,利用自定义html属性显得更加有语义,前端人员开起来也很舒服,极大地提高了前端开发人员的效率。

在默认的TagHelper实现里,不同的元素支持不同的自定义属性,以实现不同的用途,例如大部分元素都支持asp-for,而a元素则支持asp-controller和asp-action等,input元素最强大的,支持各种类型的type以及相关的格式。详细实现,请参考如下章节中的表格内容。

A元素

属性 描述

asp-controller Controller的名称

asp-action Action的名称

asp-host 网站的Host

asp-fragment URL的fragment名称

asp-protocol 网站协议(http或https)

asp-route Route名称

asp-route-

href 默认属性,如果href有值,则其它属性都不能设置任何值。

Form元素

属性 描述

asp-controller Controller的名称

asp-action Action的名称

asp-anti-forgery

asp-route-

action 默认属性,如果action有值,则其它属性都不能设置任何值。

Input元素

属性 描述

asp-for 模型字段的名称

asp-format 设置Type格式,具体如下:

格式 标准类型

HiddenInput hidden

Password password

Text text

PhoneNumber tel

Url url

EmailAddress email

Date date

DateTime datetime

DateTime-local datetime-local

Time time

Byte/SByte/Int16/UInt16/Int32/UInt32/Int64/UInt64/Single/Double number

Boolean checkbox

Decimal text

String text

IFormFile file

IEnumerable`IFormFile file

其中关于时间的具体格式如下:

属性 描述

date {0:yyyy-MM-dd}

datetime {0:yyyy-MM-ddTHH:mm:ss.fffK}

datetime-local {0:yyyy-MM-ddTHH:mm:ss.fff}

time {0:HH:mm:ss.fff}

Label元素

属性 描述

asp-for 模型字段的名称

textarea元素

属性 描述

asp-for 模型字段的名称

span元素

属性 描述

asp-validation-for 模型字段的名称

div元素

属性 描述

asp-validation-aummary ValidationSummary枚举值:
ValidationSummary.All
ValidationSummary.ModelOnly
ValidationSummary.None。

验证描述类型,只有选择了ValidationSummary.All和ValidationSummary.ModelOnly才能渲染该div元素。

select元素

属性 描述

asp-for 模型字段名称

asp-items 模型字段名称

link元素

属性 描述

asp-href-include

asp-href-exclude

asp-fallback-href 默认href加载失败时的备用地址

asp-fallback-href-include

asp-fallback-href-exclude

asp-fallback-test-class 判断加载失败时用到的class样式

asp-fallback-test-property 判断加载失败时用到的class样式中的属性

asp-fallback-test-value 判断加载失败时用到的class样式中的属性对应的值

asp-file-version

href 默认加载的css文件地址。

link的使用示例如下,比如我们定义如下代码:

<link 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" />

则该段代码表示,默认先加载aspnetcdn.com上的css文件,如果加载失败了,再加载本地网站里的css文件,加载失败的判断条件是:检测carousel-caption样式十分应用上了,即该应用了该样式的元素的display属性是否等于none。运行网站后,这段代码的生成html如下:

<link href="//ajax.aspnetcdn.com/ajax/bootstrap-touch-carousel/0.8.0/css/bootstrap-touch-carousel.css" /> <meta /> <script> !function (a, b, c) { var d, e = document, f = e.getElementsByTagName("SCRIPT"), g = f[f.length - 1].previousElementSibling, h = e.defaultView && e.defaultView.getComputedStyle ? e.defaultView.getComputedStyle(g) : g.currentStyle; if (h && h[a] !== b) { for (d = 0; d < c.length; d++) { e.write('<link href="' + c[d] + '"/>') } } }("display", "none", ["\/lib\/bootstrap-touch-carousel\/css\/bootstrap-touch-carousel.css"]); </script>

从中,我们看到,生成的HTML代码在link元素之后多了两个元素,一个是带有class="carousel-caption"属性的meta元素,一个是script脚本标签。其主要原理是如下:

在meta元素上应用定义的carousel-caption样式。通过JS代码检测该meta元素的display属性是否等于none。如果不等于none,重新加载本地的备用css文件。

注意,这里的js脚本是利用document.getElementsByTagName("SCRIPT"),获取最后一个SCRIPT标签的上一个兄弟元素的形式,来获取meta元素的。

script元素

属性 描述

asp-src-include

asp-src-exclude

asp-fallback-src 备用js文件地址

asp-fallback-src-include

asp-fallback-src-exclude

asp-fallback-test 判断默认js文件是否加载成功用到的对象

asp-file-version

src 默认的js文件地址。

script标签元素的fallback功能,和link元素记载css文件类型,只不过这里判断的不是class样式,而是检测某个对象是否存在,来判断默认的js文件是否加载成功,示例如下:

<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.10.2.min.js" asp-fallback-src="~/lib/jquery/jquery.min.js" asp-fallback-test="window.jQuery"> </script>

生成后的HTML代码,相对比较简单,示例如下:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • ASP.NET(AJAX+JSON)实现对象调用

    ASP.NET(AJAX+JSON)实现对象调用

    2016-04-29 14:00

  • ASP.NET AJAX 4.0的模版编程(Template Programming)介绍

    ASP.NET AJAX 4.0的模版编程(Template Programming)介绍

    2016-04-29 13:02

  • asp.net ajax 客户端框架未能加载

    asp.net ajax 客户端框架未能加载

    2016-01-25 08:01

  • asp.net开发常用技巧收集(2)

    asp.net开发常用技巧收集(2)

    2016-01-23 16:01

网友点评