AJax技术

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

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

script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.10.2.min.js"/scriptscript(window.jQuery||document.write("script src=\"\/lib\/jquery\/jquery.min.js\"\/script"));/script 多生成了一个script标签元

<script src="//ajax.aspnetcdn.com/ajax/jquery/jquery-1.10.2.min.js"> </script> <script>(window.jQuery||document.write("<script src=\"\/lib\/jquery\/jquery.min.js\"><\/script>"));</script>

多生成了一个script标签元素,然后判断jQuery对象是否存在,如果不存在则表示加载失败,那就再加载本地的备用js文件。

Cache

属性 描述

vary-by

vary-by-header

vary-by-query

vary-by-route

vary-by-cookie

vary-by-user

expires-on

expires-after

expires-sliding

priority

enabled .

利用EnvironmentTagHelper来控制不同运行环境的输出结果

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

<environment names="Development"> <script src="~/lib/jquery/jquery.js"></script> <script src="~/lib/bootstrap/js/bootstrap.js"></script> <script src="~/lib/hammer.js/hammer.js"></script> <script src="~/lib/bootstrap-touch-carousel/js/bootstrap-touch-carousel.js"></script> </environment> <environment names="Staging,Production"> <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> <script src="//ajax.aspnetcdn.com/ajax/bootstrap/3.0.0/bootstrap.min.js" asp-fallback-src="~/lib/bootstrap/js/bootstrap.min.js" asp-fallback-test="window.jQuery"> </script> <script src="//ajax.aspnetcdn.com/ajax/hammer.js/2.0.4/hammer.min.js" asp-fallback-src="~/lib/hammer.js/hammer.js" asp-fallback-test="window.Hammer"> </script> <script src="//ajax.aspnetcdn.com/ajax/bootstrap-touch-carousel/0.8.0/js/bootstrap-touch-carousel.js" asp-fallback-src="~/lib/bootstrap-touch-carousel/js/bootstrap-touch-carousel.js" asp-fallback-test="window.Zepto"> </script> </environment>

在上述代码中,我们定于,如果是Development环境就使用本地的js文件,否则(Staging或Production环境)就先加载cdn的文件(只不过还留有备用方案)。

该names里的值判断依据是,查找IHostingEnvironment的EnvironmentName属性,并与其进行比较,然后再进行相应的处理。

自定义TagHelper

MVC所有TagHelper的实现,都继承了Microsoft.AspNet.Razor.Runtime.TagHelpers.ITagHelper接口,所以我们只要实现该接口就可以实现自定义的TagHelper,该接口的定义如下:

public interface ITagHelper { int Order { get; } Task ProcessAsync(TagHelperContext context, TagHelperOutput output); }

不过,我们一般自定义的时候,只需要继承该接口的默认实现TagHelper类,并重载其虚方法Process方法即可,如下是几个示例,我们来详细研究一下。

1. 在a元素上直接支持controller和action属性

public class ATagHelper : TagHelper { [Activate] public IUrlHelper UrlHelper { get; set; } public string Controller { get; set; } public string Action { get; set; } public override void Process(TagHelperContext context, TagHelperOutput output) { if (Controller != null && Action != null) { var methodParameters = output.Attributes.ToDictionary(attribute => attribute.Key, attribute => (object)attribute.Value); // 删除所有的attributes,因为路由里已经可以自动生成了 output.Attributes.Clear(); output.Attributes["href"] = UrlHelper.Action(Action, Controller, methodParameters); output.PreContent.SetContent("My "); } } }

2. 自动识别Text文本中的链接,并提取出来

[TargetElement("p")] public class AutoLinkerTagHelper : TagHelper { public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { var childContent = await context.GetChildContentAsync(); // Find Urls in the content and replace them with their anchor tag equivalent. output.Content.SetContent(Regex.Replace( childContent.GetContent(), @"\b(?:https?://|www\.)(\S+)\b", "<strong><a target=\"_blank\" href=\"http://$0\">$0</a></strong>")); } }

3. 条件判断

定义一个condiction,符合条件才显示该元素,示例如下(只有Model.Approved为true时才显示该元素):

<p condition="Model.Approved" >© @Model.CopyrightYear - My ASP.NET Application</p>

实现代码如下:

 

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

网友点评