当前位置: 首页 > news >正文

企业网站素材图片做网站上面图片的软件

企业网站素材图片,做网站上面图片的软件,外贸营销方式有哪些,网站布局用什么代码众所周知#xff0c;在asp.net core中编写Razor视图的时候#xff0c;用了一种新的写法--TagHelper 那这个TagHelper是怎么回事呢? 首先来看看TagHelper的项目位置#xff0c;它是位于Microsoft.AspNetCore.Mvc.TagHelpers。 如果看到project.json#xff0c;可以发现在asp.net core中编写Razor视图的时候用了一种新的写法--TagHelper 那这个TagHelper是怎么回事呢?   首先来看看TagHelper的项目位置它是位于Microsoft.AspNetCore.Mvc.TagHelpers。 如果看到project.json可以发现它还依赖一个比较重要的东西Microsoft.AspNetCore.Mvc.Razor 为什么这么说呢其实很简单看了里面诸多TagHelper就会发现里面都是继承了 Microsoft.AspNetCore.Razor.TagHelpers下面的TagHelper这个抽象类。 下面就以我们天天用到的表单--FormTagHelper为例来说一下他是怎么实现的。 首先要看看TagHelper这个抽象类 public abstract class TagHelper : ITagHelper     {         protected TagHelper();              public virtual int Order { get; }         public virtual void Init(TagHelperContext context);         public virtual void Process(TagHelperContext context, TagHelperOutput output);         public virtual Task ProcessAsync(TagHelperContext context, TagHelperOutput output);     } 面包含两比较重要的方法Process和ProcessAsync 其实看方法名就应该知道一个是同步的方法一个是异步的方法 因为这个是输出html的方法你说这能不重要吗下面来看看FormTagHelper的具体实现吧 [HtmlTargetElement(form, Attributes ActionAttributeName)] 先来看看HtmlTargetElement这个Attribute是用来干嘛的 简单来说它指定了我们html标签(form/form)以及一些相关的元素。 可以看到诸多Attributes XXXAttributeName其中的XXXAttributeName是在类里面定义的变量。 private const string ActionAttributeName asp-action;         private const string AntiforgeryAttributeName asp-antiforgery;         private const string AreaAttributeName asp-area;         private const string ControllerAttributeName asp-controller;         private const string RouteAttributeName asp-route;         private const string RouteValuesDictionaryName asp-all-route-data;         private const string RouteValuesPrefix asp-route-;         private const string HtmlActionAttributeName action; 再来看看下面的图相对比一看是不是就很清晰了呢 我们可以看到下面的好几个属性如Controller它的上面是有 HtmlAttributeName来标注的 而且这个指向的名字还是ControllerAttributeName(也就是asp-controller)。这个就是用来接收asp-controller的值。 [HtmlAttributeName(ControllerAttributeName)]public string Controller { get; set; } 相对来说这样做只是起了个别名。 [HtmlTargetElement(form, Attributes ActionAttributeName)]     [HtmlTargetElement(form, Attributes AntiforgeryAttributeName)]     [HtmlTargetElement(form, Attributes AreaAttributeName)]     [HtmlTargetElement(form, Attributes ControllerAttributeName)]     [HtmlTargetElement(form, Attributes RouteAttributeName)]     [HtmlTargetElement(form, Attributes RouteValuesDictionaryName)]     [HtmlTargetElement(form, Attributes RouteValuesPrefix *)]     public class FormTagHelper : TagHelper 当然我们也是可以不指定别名的也可以不用在HtmlTargetElement指明Attributes 好比如下的代码就可以直接用Controller [HtmlTargetElement(form)] public class FormTagHelper : TagHelper { public string Controller { get; set; } } 还有一个RouteValues的属性它是一个键值对用来存放参数的具体可以怎么用呢 总的来说有两种用法。可以看到它指向asp-all-route-data和asp-route- 1 [HtmlAttributeName(RouteValuesDictionaryName, DictionaryAttributePrefix RouteValuesPrefix)] 用法如下一种是用asp-all-route-data来接收一个IDictionary类型的变量一种是通过asp-route-*的方式来接收参数*的值。 这两种写法是等价的。 下面就是FormTagHelper的构造函数和一个Generator属性 public FormTagHelper(IHtmlGenerator generator) { Generator generator;  } protected IHtmlGenerator Generator { get; } 由于在Core中依赖注入随处可见看到这个写法马上就是想到了这个 果不其然发现其对应了一个实现类DefaultHtmlGenerator。 public class DefaultHtmlGenerator : IHtmlGenerator     {                public DefaultHtmlGenerator(IAntiforgery antiforgery, IOptionsMvcViewOptions optionsAccessor, IModelMetadataProvider metadataProvider, IUrlHelperFactory urlHelperFactory, HtmlEncoder htmlEncoder, ClientValidatorCache clientValidatorCache);             public virtual TagBuilder GenerateActionLink(ViewContext viewContext, string linkText, string actionName, string controllerName, string protocol, string hostname, string fragment, object routeValues, object htmlAttributes);         public virtual IHtmlContent GenerateAntiforgery(ViewContext viewContext);             public virtual TagBuilder GenerateForm(ViewContext viewContext, string actionName, string controllerName, object routeValues, string method, object htmlAttributes);            public virtual TagBuilder GenerateLabel(ViewContext viewContext, ModelExplorer modelExplorer, string expression, string labelText, object htmlAttributes);           public virtual TagBuilder GenerateTextArea(ViewContext viewContext, ModelExplorer modelExplorer, string expression, int rows, int columns, object htmlAttributes);         public virtual TagBuilder GenerateTextBox(ViewContext viewContext, ModelExplorer modelExplorer, string expression, object value, string format, object htmlAttributes);                protected virtual TagBuilder GenerateInput(ViewContext viewContext, InputType inputType, ModelExplorer modelExplorer, string expression, object value, bool useViewData, bool isChecked, bool setId, bool isExplicitValue, string format, IDictionarystring, object htmlAttributes);         protected virtual TagBuilder GenerateLink(string linkText, string url, object htmlAttributes);      ....省略部分     } 这个类里面我们看到了熟悉的TagBuilder就算不去看它里面的实现都能知道它是用来干嘛的 它就是用来创建我们的Html标签相信用过MVC的多多少少都扩展过HtmlHelper这是类似的。 最后也是最最重要的重写的Process方法。 可以看到开始就判断了表单form中是否包含了action这个属性output.Attributes.ContainsName(HtmlActionAttributeName) 如果包含就是正常的html标签。换句话说正常的html写法和我们的TagHelper方法会有冲突只能用其中一种。 当我们这样写的时候编译能通过。 但是运行的时候就会出错。 再下面的处理就是用了TagBuilder去处理了。 收集路由的数据放到一个字典中-区域是否存在-用Generator去创建form表单返回TagBuilder对象-TagHelperOutput对象把tagbuilder的innerhtml等信息输出。 如下面的写法 1 form methodpost asp-actionGet asp-controllerProduct asp-antiforgeryfalse asp-route-id22 button typesubmitsubmit/button3 /form 生成对应的html如下 1 form methodpost action/Product/Get/22 button typesubmitsubmit/button3 /form   到这里FormTagHelper的讲解就算是OK至于其他的原理都是差不多就不再累赘了。   来看看到底有多少种TagHelper(还没有部分没有列出来)以及它们包含的属性。     下面是我们自己写一个TagHelper——CatcherATagHelper这个TagHelper是干什么的呢它只是一个精简版的A标签。 using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.Routing; using Microsoft.AspNetCore.Mvc.TagHelpers; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; namespace Catcher.EasyDemo.Controllers.TagHelpers {     [HtmlTargetElement(catcher-a)]     public class CatcherATagHelper:TagHelper     {                public CatcherATagHelper(IHtmlGenerator generator, IUrlHelperFactory urlHelperFactory)         {             this.Generator generator;             UrlHelperFactory urlHelperFactory;         }         [HtmlAttributeNotBound]         public IUrlHelperFactory UrlHelperFactory { get; }         protected IHtmlGenerator Generator { get; }                  public override int Order         {             get             {                 return -1000;             }         }                          public string Action { get; set; }                  public string Controller { get; set; }         public string LinkText { get; set; }         [ViewContext]         [HtmlAttributeNotBound]         public ViewContext ViewContext { get; set; }         public override void Process(TagHelperContext context, TagHelperOutput output)         {             //method 1             if (Action ! null || Controller ! null)             {                 output.Attributes.Clear();                 var urlHelper UrlHelperFactory.GetUrlHelper(ViewContext);                 output.TagName a;                 output.Attributes.SetAttribute(href, urlHelper.Action(Action, Controller));                 //whether the inner html is null                 if (output.Content.IsEmptyOrWhiteSpace)                 {                     output.PreContent.SetContent(LinkText);                 }             }             //method 2             //TagBuilder tagBuilder;             //if (Action ! null || Controller ! null)             //{             //    tagBuilder Generator.GenerateActionLink(             //            ViewContext,             //            linkText: string.Empty,             //            actionName: Action,             //            controllerName: Controller,             //            protocol: string.Empty,             //            hostname: string.Empty,             //            fragment: string.Empty,             //            routeValues: null,             //            htmlAttributes: null);             //    output.TagName a;             //    //whether the inner html is null             //    if (output.Content.IsEmptyOrWhiteSpace)             //    {             //        output.PreContent.SetContent(LinkText);             //    }             //    output.MergeAttributes(tagBuilder);             //}         }     } } 这里提供了两种写法供大家参考 一种是借助IUrlHelperFactory去生成链接 一种是借助IHtmlGenerator去生成链接 写好了之后要怎么用呢 不知道大家有没有留意_ViewImports.cshtml这个文件 1 using Catcher.EasyDemo.Website2 addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers3 inject Microsoft.ApplicationInsights.Extensibility.TelemetryConfiguration TelemetryConfiguration 这个是默认情况下帮我们添加的TagHelper 我们可以在要用到那个TagHelper的地方添加就好 {  Layout null; }addTagHelper Catcher.EasyDemo.Controllers.TagHelpers.CatcherATagHelper , Catcher.EasyDemo.Controllers catcher-a actionlist controllerproduct link-texttextWith LinkText And InnerHtml/catcher-abr /catcher-a actionlist controllerproduct link-textWithout LinkText/catcher-a br /catcher-a actionlist controllerproduct link-textOnly With LinkText/catcher-a   addTagHelper的用法如下 addTagHelper 你的TagHelper , 你的TagHelper所在的命名空间 或者更直接 addTagHelper * , 你的TagHelper所在的命名空间  可以添加当然也可以删除删除是removeTagHelper 当我们在自己的框架中完全重写了一套自己的TagHelper那么这个时候微软自己的TagHelper我们就可以通过下面的方法来移除了。 removeTagHelper * , Microsoft.AspNetCore.Mvc.TagHelpers 原文地址http://www.cnblogs.com/catcher1994/p/5790720.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注
http://www.pierceye.com/news/210432/

相关文章:

  • 哪里有网站建设哪家好word做网站框架
  • 企业建网站的费用百度掘金入口官网
  • 德洲网站建设wordpress的title设置
  • 苏州企业网站制作服务河北关键词排名推广
  • 营销型集团网站建设镇江网站推广
  • 怎样才能制做免费网站golang 网站开发 开源
  • 哈尔滨做网站哪好免费网站模板
  • 网站怎么做才有效果如何用博客网站做cpa
  • 网站申请书博客系统做网站
  • 灰色行业老域名做网站不收录初学者的网站建设
  • 网站做成微信小程序贵州企业seo
  • 在淘宝做印刷网站怎么办wordpress 主题 edu
  • 成都设计公司网站线上线下一体化营销
  • 网站你懂我意思正能量晚上下载注册公司需要多少钱手续费
  • 在线html网站开发广州网站排名优化公司
  • 如何在免费网站上做推扩自己怎么来建设网站
  • 福安市教育局建设网站做架构图简单的网站
  • 如何快速进行网站开发seo是什么东西
  • 网站建设需要具备哪些学编程多少钱学费
  • 建设工程许可证在那个网站办金融行业网站制作
  • 邢台专业做网站价格信息流广告是什么
  • 网站开发的母的目的和意义.建设购物平台网站
  • 立方米网站建设做淘宝客网站用什么程序好
  • 怎样做网站挣钱建筑资料软件
  • 涿州建设局网站苏州市高新区建设局网站
  • 个人soho要怎么做企业网站成都包装设计公司
  • 网站开发 chrome浏览器崩溃ruhe用dw做网站
  • 全屏网站 图片优化个人网站cms系统
  • 做我女朋友程序网站邵东做网站
  • 建设网站如何挂到网上wordpress首页添加幻灯