在编程中,常常有这样的需求:当某条件为真时,显示Html代码段A;条件为假时,显示代码段B。

如下所示:

    @if (true){<h1>条件为真</h1>}else{<h1>条件为假</h1>}

现在,我就写了个自定义的TagHelpers,方便实现这种需求。格式如下:

<HF.gl selbool="true" >
<h1>条件为真</h1>
【或】
<h1>条件为假</h1>
</HF.gl>

selbool属性用来填写条件,“【或】”是分隔符。把条件为真的代码填写在【或】前面,条件为假的代码发放在【或】后面。这样就实现了第一段代码的功能。可能有人要问,何必这么复杂,第一段代码不是挺好吗?确实,第一段代码也很简单就实现了这个功能。下面我们对比一下
    @if (Ones.uPermit("A06")){<text>得到A06授权显示</text>}else{<text>未得到A06授权显示</text>}<HF.gl selbool=@Ones.uPermit("A06")>得到A06授权显示【或】未得到A06授权显示</HF.gl>

这样如何呢?是不是一句话代码看起来比较舒服?

还有,我们也会常用到switch,那我们在这个TagHelpers里面也加上这个功能吧。

如下:

<HF.gl selint="2" >第一段【或】第二段【或】第三段【或】第四段</HF.gl>

selint属性表示显示第几段的内容,上面这句运行结果就是:第二段

希望这个自定义的TagHelpers能给大家带来点帮助。

下面附上这段源码:

namespace HHFcoreTag.TagHelpers
{[HtmlTargetElement("HF.gl")]//<HF.gl selbool="true" selint="2" >abc【或】def</HF.gl>[HtmlTargetElement(Attributes = nameof(Selbool))][HtmlTargetElement(Attributes = nameof(Selint))]public class MyTagHelper : TagHelper{public bool Selbool { get; set; }public int Selint { get; set; }public override void Process(TagHelperContext context, TagHelperOutput output){output.TagName = "";var htmls = Regex.Split(output.GetChildContentAsync().Result.GetContent(), "【或】", RegexOptions.IgnoreCase);//不可同时使用两个条件if (context.AllAttributes.ContainsName("selbool") == true &&context.AllAttributes.ContainsName("selint") == true){output.Content.SetHtmlContent("<b><font color=#ff0000>错误:selbool、selint条件属性不可同时使用!</font></b>");return;}//条件选择(布尔值)if (context.AllAttributes.ContainsName("selbool")){if (Selbool == true){output.Content.SetHtmlContent(htmls[0]);}else{if (htmls.Count() > 0) { output.Content.SetHtmlContent(htmls[1]); } else { output.Content.SetHtmlContent(""); }}}//条件选择(数字序号)if (context.AllAttributes.ContainsName("selint")){if(Selint<= htmls.Count()&&Selint>=1) {output.Content.SetHtmlContent(htmls[Selint-1]);}else { output.Content.SetHtmlContent(""); }}}}
}

转载于:https://www.cnblogs.com/aputitree/p/7358937.html

Asp.net Core 一个实用的自定义TagHelpers相关推荐

  1. asp.net core系列 47 Identity 自定义用户数据

    一.概述 接着上篇的WebAppIdentityDemo项目,将自定义用户数据添加到Identity DB,自定义扩展的用户数据类应继承IdentityUser类, 文件名为Areas / Ident ...

  2. Asp.NET Core 一个接口的多个实现如何通过 DI 注册?

    咨询区 LP13 我有三个 Service 类实现了同一个接口,参考代码如下: public interface IService { } public class ServiceA : IServi ...

  3. asp.net core利用DI实现自定义用户系统,脱离ControllerBase.User

    前言 很多时候其实我们并不需要asp.net core自带的那么复杂的用户系统,基于角色,各种概念,还得用EF Core,而且在web应用中都是把信息存储到cookie中进行通讯(我不喜欢放cooki ...

  4. Asp.NET Core一个接口的多个实现如何基于当前HTTP请求注册

    前言 假设我们有三个Service类实现了同一接口,示例代码如下: public interface IService { } public class ServiceA : IService { } ...

  5. Asp.Net Core之Identity应用(下篇)

    一.前言 在上篇中简单介绍了 Asp.Net Core 自带的 Identity,一个负责对用户的身份进行认证的框架,当我们按需选择这个框架作为管理和存储我们应用中的用户账号数据的时候,就会添加到自己 ...

  6. 不好意思,这么久没有更新《从零开始掌握ASP.NET Core 》

    点击上方蓝字,关注「我们」 等了快个月了,终于开始更新了. 因为感冒,弄的嗓子有点沙哑.所以停了半个月才是更新,目前一口气更新了12个章节,大家可以耐心观看内容了. <从零开始学ASP.NET ...

  7. 极简版ASP.NET Core学习路径及教程

    绝承认这是一个七天速成教程,即使有这个效果,我也不愿意接受这个名字.嗯. 视频系列已出: http://www.cnblogs.com/jesse2013/p/aspnetcore-videos.ht ...

  8. 从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用Application Part动态加载控制器和视图...

    如果你使用过一些开源CMS的话,肯定会用过其中的的插件化功能,用户可以通过启用或者上传插件包的方式动态添加一些功能,那么在ASP.NET Core MVC中如何实现插件化开发呢,下面我们来探究一下. ...

  9. 学习ASP.NET Core,怎能不了解请求处理管道[2]: 服务器在管道中的“龙头”地位

    ASP.NET Core管道由注册的服务器和一系列中间件构成.我们在上一篇中深入剖析了中间件,现在我们来了解一下服务器.服务器是ASP .NET Core管道的第一个节点,它负责完整请求的监听和接收, ...

  10. 聊聊ASP.NET Core默认提供的这个跨平台的服务器——KestrelServer

    跨平台是ASP.NET Core一个显著的特性,而KestrelServer是目前微软推出了唯一一个能够真正跨平台的Server.KestrelServer利用一个名为KestrelEngine的网络 ...

最新文章

  1. python 简单数据库_Python打造一个简单的本地数据库
  2. java 日志输出 log4j 简介
  3. Python '\r', '\n', '\r\n' 的彻底理解
  4. com.android.dex.DexIndexOverflowException: Cannot merge new index 66299 into a non-jumbo instruction
  5. C语言数组元素总和最大的连续子序列的算法(附完整源码)
  6. h5页面长按保存图片
  7. Linux xargs命令
  8. activemq消息持久化_将ActiveMQ持久消息传递性能提高25倍
  9. 网站漏洞扫描工具_如何实现免费网站漏洞扫描?推荐一款神器给你
  10. 面试题系列-Spring连环10问
  11. sql oracle 自增长字段,Oracle添加自增长字段方法步骤
  12. python ui自动化脚本_ui自动化:python+appium----环境搭建
  13. SAP License:SAP菜单修改
  14. 出现net.sf.json.JSONException: There is a cycle in the hierarchy异常的解决办法
  15. 【Java与智能设备】 CH05_2 Intent启动内置程序
  16. Python坦克大战(一):素材准备
  17. python转二进制_python转二进制
  18. 【微信小程序】圆环进度条
  19. 手把手教你用 jQuery 制作无缝轮播
  20. 汇编语言-王爽 第7章 更灵活的定位内存地址的方法-笔记

热门文章

  1. c语言递归1到10联程,为什么这个递归能输出1到10
  2. python盖帽法_干货:用Python进行数据清洗,这7种方法你一定要掌握
  3. excel工具栏隐藏了怎么办_Pixel Studio 像素软件教程之工具栏介绍
  4. 【POJ2318】TOYS(点在凸多边形内判定---模版暴力/二分)
  5. 牛客网OI题:序列划分
  6. java判断闰年代码_根据输入的年份判断是否是闰年?(在JAVA用if-else)
  7. c语言自治区二级考试题库,新疆自治区计算机二级c语言考试题库---副本.pdf
  8. python3 yum源_Redhat7.3更换CentOS7 yum源
  9. DSSM模型的原理简介,预测两个句子的语义相似度
  10. DSSM,Deep Structured Semantic Models