关于TagHelper的那些事情——TagHelper的基本知识
概要
TagHelper是ASP.NET 5的一个新特性。也许在你还没有听说过它的时候, 它已经在技术人员之间引起了大量讨论,甚至有一部分称它为服务器控件的回归。实际上它只不过是一个简化版本,把HTML和服务器内容混合在一起,没有控件生命周期,状态保持和事件。它不像服务器控件那样,对页面所有内容都具有访问权限。它只能访问到自己所生成的内容。
什么是TagHelper?
我们曾经在MVC项目中使用在HtmlHelps。比如当需要在View上添加一个导航栏的时候,我们就会添加下面代码到页面上去:
<ol>
…
<li>@Html.ActionLink("Home", "Index", "Home")<li>
…
</ol>
这里有一些HTML元素。还有以@开头的一些C#代码,当View解析的时候这些C#代码会被解析成HTML元素。
当我们用TagHelper,我们同样可以用下面的代码来获得上面同样的效果:
<ol>
…
<li><a controller="Home" action="Index">Home</a></li>
…
</ol>
在这里,A元素的属性controller和action并不是HTML5的属性,而是这个TagHelper的属性。
这里需要着重申明一点是,虽然TagHelper看起来有点像我们之前服务器控件的写法,但是它不是服务器控件的再次回归。它更像是给用户一个简洁的方式来表达用户的意向。它本身并没有生命周期之类的东西。它会预处理服务器内容,然后赋值给相应的属性。我们来看一下关于微软提供的SelectTagHelper的一个用法:
<select asp-for="Country" asp-items="ViewBag.Countries">
其中文本“Country”被赋给asp-for属性,变量ViewBag.Countries被赋给属性asp-items.
怎么使用TagHelpers?
关于如何使用TagHelpers,我们可以参照一下几步:
- 在project.json文件中添加具有TagHelpers的package的依赖;
- 在所用的View上注册TagHelper:
@addTagHelper “[the full type name of taghelper,] the assembly name”
第一参数是TagHelper类的全名,当你只需要使用某一个TagHelper时候,你可以在此指定你所用的TagHelper类全名,包括它的NameSpace。如果你要使用程序集中所有的TagHelpers,在这里你可以使用“*”或者省略这一个参数。举个例子,如果你需要使用微软提供的TagHelpers可以通过添加下面的代码在注册:
@addTagHelper "*, Microsoft.AspNet.Mvc.TagHelpers"
或者
@addTagHelper "Microsoft.AspNet.Mvc.TagHelpers"
如果你只希望使用AnchorTagHelper,那么只需要一下代码:
@addTagHelper "Microsoft.AspNet.Mvc.TagHelpers.AnchorTagHelper, Microsoft.AspNet.Mvc.TagHelpers"
第二个参数是程序集名。
当然,如果你想取消某个TagHelper的注册,可以使用removeTagHelper,比如@removeTagHelper "Microsoft.AspNet.Mvc.TagHelpers.AnchorTagHelper, Microsoft.AspNet.Mvc.TagHelpers"
一旦TagHelper被取消注册了,其对应的Tag就不能被解析成这种TagHelper了。
- 在View中需要使用的地方添加TagHelper,比如我们添加一个AnchorTagHelper:
<a asp-controller="Home" asp-action="About">About</a>
写在本文的结尾
以上介绍了TagHelper的一些基本知识,这是知识是基于ASP.NET5 beta4的,ASP.NET5还在开发之中,现在已经发布了beta5,有些东西也是一直在变化,所以可能上面写到的某些方法名,程序集名在新的版本都发生了变化,这一点需要注意。
接下来我会介绍关于微软已经给我们提供的一些TagHelpers和如何开发自己的TagHelper。
关于TagHelper的那些事情——TagHelper的基本知识的更多相关文章
- 关于TagHelper的那些事情——自定义TagHelper(内嵌TagHelper)
内嵌TagHelper 上一篇文章中提到有时候需要设计一种内嵌的TagHelper,如下: <my name="yy" age="35"> < ...
- 关于TagHelper的那些事情——如何自定义TagHelper(TagHelper基类)
写在开头 前面介绍了TagHelper的基本概念和内嵌的TagHelpers,想必大家对TagHelper都有一定的了解.TagHelper看上去有点像WebControl,但它不同于WebContr ...
- 关于TagHelper的那些事情——自定义TagHelper(格式化输出、依赖注入使用)
自定义TagHelper的最后一步就是在Process方法或ProcessAsync方法中添加展现代码.熟悉WebControl开发的朋友都知道Render方法,在这个方法中会添加展现的Html元素和 ...
- 关于TagHelper的那些事情——自定义TagHelper(TagHelper的Attributes)
接上 Attributes 在最新的VS2015RC版,开始支持了TagHelper的智能提示,主要体现在在写TagHelper有Attributes的提示,正确的Tag和Attribute会变成粗体 ...
- 关于TagHelper的那些事情——Microsoft.AspNet.Mvc.TagHelpers介绍
写在开始 在上一篇文章中,简单介绍了什么是TagHelper,怎么使用它.接下来我会简单介绍一下微软随着ASP.NET5一起发布的TagHelpers.它们分别是: AnchorTagHelper C ...
- Netcore 基础之TagHelper知识
饮水思源,来自:http://www.cnblogs.com/liontone 的BLOG中关于taghelper中的内容 概要 TagHelper是ASP.NET 5的一个新特性.也许在你还没有听说 ...
- TagHelper是怎么实现的
众所周知,在asp.net core中编写Razor视图的时候,用了一种新的写法--TagHelper 那这个TagHelper是怎么回事呢? 首先来看看TagHelper的项目位置,它是位于Micr ...
- TagHelper
TagHelper是怎么实现的 众所周知,在asp.net core中编写Razor视图的时候,用了一种新的写法--TagHelper 那这个TagHelper是怎么回事呢? 首先来看看TagHe ...
- Razor TagHelper实现Markdown转HTML
Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 用途 Markdown的语法简洁明了.学习容易,而且功能比纯文本更强,因此有很多人 ...
随机推荐
- 阿里云Centos等更新源设置成阿里源方法。
https://help.aliyun.com/knowledge_detail/5974184.html ---------------------------------------------- ...
- Docker概览
Docker.xmind下载
- Java Web学习脑图
Java Web学习脑图,从知乎上摘录,感谢知乎网友的分享.
- SGU 202. The Towers of Hanoi Revisited
多柱汉诺塔问题. 引用自wiki百科 多塔汉诺塔问题 在有3个柱子时,所需步数的公式较简单,但对于4个以上柱子的汉诺塔尚未得到通用公式,但有一递归公式(未得到证明,但目前为止没有找到反例): 令为在有 ...
- AC日记——背单词 洛谷 P2353
背单词 思路: KMP+统计前缀和优化: 代码: #include <bits/stdc++.h> using namespace std; #define maxn 1000005 ], ...
- Hadoop 学习【一】 安装部署
目标:测试Hadoop的集群安装 参考文档: [1]http://hadoop.apache.org/docs/r2.8.0/hadoop-project-dist/hadoop-common/Sin ...
- js正则表达大合集【转载自:http://caibaojian.com】
[注明原文链接吧]:http://caibaojian.com 1 用户名正则 //用户名正则,4到16位(字母,数字,下划线,减号) var uPattern = /^[a-zA-Z0-9_-]{4 ...
- gulp在webstorm里运行,告别cmd控制台!
使用webstorm运行gulp程序,不再用一直开着cmd了!鬼知道自己会不会不小心关闭了cmd呢.看截图操作吧! 如果你的gulp设置了default任务,那么直接点击“运行‘default‘’就行 ...
- C++ cin.ignore()用法
cin.ignore(int a,char b); a为一行中最大读取字符长度,b为某一个字符.在缓冲区中寻找b,找到后忽略b以前的所有字符(包括b).如果在a的范围内还没有找到b,则忽略b以前的所有 ...
- tmpfs文件系统
centos 7测试OK 创建挂载点,挂载 mkdir -p /run/testdirmount -nt tmpfs -o size=500m,mode=755 tmpfs /run/testdir