加入收藏

【快播报】Asp.net core使用Razor试图引擎编写TagHelper

2023-06-28 07:52:52 来源:博客园

之前使用wtm来进行快速开发


(资料图片仅供参考)

wtm框架见:

https://wtmdoc.walkingtec.cn/

其前端选择Layui的情况下有大量的TagHelper,大幅度提高了开发效率

虽然已有的组件很丰富但也不能完全覆盖所有的需求,这个时候就需要自己写TagHelper。

参考了WTM源码,和微软官方文档

TagHelper虽然使用起来方便,但是大量的拼接字符串编写体验和可读性都不是很好。

理想的情况是能充分利用.net中强大的Razor引擎来编写TagHelper,从而更方便的进行组件复用。

可以从asp.net core中找到viewengine的使用方法

以封装一个wangEditor为例

TagHelper:

using Microsoft.AspNetCore.Html;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc.ModelBinding;using Microsoft.AspNetCore.Mvc.Rendering;using Microsoft.AspNetCore.Mvc.ViewEngines;using Microsoft.AspNetCore.Mvc.ViewFeatures;using Microsoft.AspNetCore.Razor.TagHelpers;using System;using System.IO;using WalkingTec.Mvvm.Core;using WalkingTec.Mvvm.Core.Extensions;using WalkingTec.Mvvm.TagHelpers.LayUI;namespace TagHelpers{    [HtmlTargetElement("wt:wangeditor", Attributes = "field", TagStructure = TagStructure.WithoutEndTag)]    public class WangEditorTagHelper : TagHelper    {        public WangEditorTagHelper(ICompositeViewEngine viewEngine,IHttpContextAccessor httpContextAccessor)         {            _viewEngine = viewEngine;            _httpContextAccessor = httpContextAccessor;        }        public ModelExpression Field { get; set; }        public string Id { get; set; }        public string Name { get; set; }        public int Height { get; set; } = 300;        private ICompositeViewEngine _viewEngine;        private IHttpContextAccessor _httpContextAccessor;        public override void Process(TagHelperContext context, TagHelperOutput output)        {            var viewEngineResult = _viewEngine.GetView("~/Views/Shared/Components/WangEditor/", "Default.cshtml", false);            if (!viewEngineResult.Success)            {                throw new InvalidOperationException($"Couldn"t find view /Shared/Components/WangEditor/Default.cshtml");            }            using (var sr = new StringWriter())            {                var viewContext = new ViewContext();                viewContext.HttpContext = _httpContextAccessor.HttpContext;                viewContext.ViewData = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())                {                    Model = new WangEditorConfig()                    {                        Id = Id ?? Utils.GetIdByName(Field?.ModelExplorer.Container.ModelType.Name + "." + Field?.Name),                        Name = Name ?? Field?.Name,                        Value = Field?.Model?.ToString(),                        Height = Height                    }                };                viewContext.Writer = sr;                viewEngineResult.View.RenderAsync(viewContext).GetAwaiter().GetResult();                output.TagName = "div";                output.TagMode = TagMode.StartTagAndEndTag;                output.Content.SetHtmlContent(sr.ToString());            }        }    }    public class WangEditorConfig    {        public string Id { get; set; }        public string Name { get; set; }        public string Value { get; set; }        public int Height { get; set; }    }}

cshtml,使用razor视图引擎编写可读性就好了很多。

@using TagHelpers;@model WangEditorConfig
<script type="text/javascript"> (function(){ var wEditor = window.wangEditor; var editorConfig = { placeholder: "请输入...", onChange(editor) { var hidden = document.getElementById("@(Model.Id)-hidden"); var html = editor.getHtml(); hidden.value=html; } } var editor = wEditor.createEditor({ selector: "#@(Model.Id)-editor-container", html: "@Html.Raw(Model.Value)", config: editorConfig, mode: "default", // or "simple" }) var toolbarConfig = {} toolbarConfig.excludeKeys = [ "insertVideo", "insertImage" ]; var toolbar = wEditor.createToolbar({ editor, selector: "#@(Model.Id)-toolbar-container", config: toolbarConfig, mode: "simple", // or "simple" }) console.log(toolbar.getConfig().toolbarKeys); }()); </script>

关键词:

相关新闻

资讯

滚动:1-5月我国造船业三大指标全面增长 国际市场份额保持领先
滚动:1-5月我国造船业三大指标全面增长 国际市场份额保持领先

人民网北京6月26日电(黄盛)据中国船舶工业行业协会......更多>

边牧吧宠物吧 边牧吧|环球新要闻
边牧吧宠物吧 边牧吧|环球新要闻

1、是边牧。2、一百多年来,边牧培育的主要标准是它的......更多>

宏辉石油股东郑建丰增持140万股 权益变动后直接持股比例为41.31% 世界观点
宏辉石油股东郑建丰增持140万股 权益变动后直接持股比例为41.31% 世界观点

宏辉石油股东郑建丰增持140万股权益变动后直接持股比......更多>

动态焦点:格莱美制定新规则,音乐行业正在接受AI?
动态焦点:格莱美制定新规则,音乐行业正在接受AI?

作者|万翛编辑|范志辉讨厌AI创作的音乐人可以暂时松一......更多>

雷诺(RNLSY.US)以2亿欧元出售Alpine F1车队24%股份 微头条
雷诺(RNLSY.US)以2亿欧元出售Alpine F1车队24%股份 微头条

智通财经APP获悉RedBirdCapitalPartners和OtroCapital......更多>

罗马诺:富勒姆并未与米兰谈判巴洛图雷,他目前不在引援名单上|速递
罗马诺:富勒姆并未与米兰谈判巴洛图雷,他目前不在引援名单上|速递

罗马诺:富勒姆并未与米兰谈判巴洛图雷,他目前不在引......更多>

持续高温天气下,北京新发地市场蔬菜供应量足价稳|每日速递
持续高温天气下,北京新发地市场蔬菜供应量足价稳|每日速递

北京已连续多日持续高温。6月25日,新京报记者走访北......更多>

环球即时看!爱慕股份6月27日盘中涨幅达5%
环球即时看!爱慕股份6月27日盘中涨幅达5%

以下是爱慕股份在北京时间6月27日10:10分盘口异动快照......更多>

河南内乡县总工会推进劳模创新工作室提质升级_信息
河南内乡县总工会推进劳模创新工作室提质升级_信息

中工网讯立足于“建”,着力于“创”,落脚于“用”。......更多>

关注

端午节假期国内出游人次破亿
端午节假期国内出游人次破亿
端午节假期,旅游市场表现亮眼。文旅部6月24日晚披露... 更多>
端午节假期国内出游人次破亿
端午节假期,旅游市场表现亮眼。文旅部6月24日晚披露... 更多>
全球头条:南华西社区红歌会奏响,居民欢聚享音乐盛宴
为传承红色基因,厚植爱国主义情怀,赓续红色血脉,6... 更多>
当前消息!@找工作的你 快看!华南理工大学附属实验学校招聘教师4名
五山君了解到,因教学工作需要华南理工大学附属实验学... 更多>
2023上半年中国房地产总结与展望(产品篇)-当前关注
2023上半年中国房地产总结与展望(产品篇),四房,小户... 更多>
“彩云之约”海外台胞云南行正式启动|当前焦点
6月27日,以“同心圆梦融合发展”为主题的“彩云之约... 更多>
让群众成为竞演的主角 让竞演成为群众的节日丨聚焦“乡当潮”竞演大赛 资讯推荐
6月以来,四川省第三届乡村文化振兴魅力竞演大赛在我... 更多>
2023江苏航空职业技术学院招生计划-各专业招生人数是多少
高考填报志愿时,江苏航空职业技术学院招生计划是广大... 更多>
天天热点!俄罗斯紧张局势影响有限 国际油价6月26日小幅上涨
俄罗斯紧张局势影响有限国际油价6月26日小幅上涨,俄罗... 更多>
金沙街道:我为群众办实事 增设步道解民忧|今日观点
金沙街道:我为群众办实事增设步道解民忧金沙街道供稿... 更多>
宣称服务过王俊凯和赵丽颖,北京一公司虚假宣传被罚 全球播报
“授课的老师……服务过王俊凯,还有赵丽颖”,立夏梧... 更多>
全球百事通!什么口红牌子好又不贵_口红什么牌子好用不贵
问题:口红在女同胞中很受欢迎,但不知道哪个牌子的口... 更多>
全球热资讯!“张北的风点亮北京的灯”背后的一组“公式”
“张北的风点亮北京的灯”背后的一组“公式”张北草原... 更多>