时间:2023-06-27 20:13:41 / 来源:
博客园 / 点击数:()
之前使用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>
最近更新
- 【环球新视野】Asp.net core使用Razor试图引擎编写TagHelper2023-06-27
- 天天微速讯:明朝末年,崇祯为什么不学东晋和南宋,南下立国2023-06-27
- 英雄联盟感恩皮肤碎片有什么用_lol感恩皮肤碎片怎么获得-天天信息2023-06-27
- 避暑度假到贵州 | 漂流 贵州夏季体育旅游的启动键2023-06-27
- 每日快看:2023全球数字经济大会数字安全高峰论坛开幕在即2023-06-27
- 泰州姜堰:全部捐出!5000元见义勇为奖金的背后2023-06-27
- 仙宗大掌门弟子排名是什么-弟子排名表分享_天天讯息2023-06-27
- 方正电机:获得理想汽车项目定点书_全球新资讯2023-06-27
- 全球观速讯丨FRAPS视频导入VEGAS教程2023-06-27
- 全球首台16兆瓦海上风机首支叶片吊装完成 全球简讯2023-06-27
- 简讯:大桥集团项目荣获武汉市“结构优质工程”奖2023-06-27
- 广东高考普通类(物理)分数段统计表(一分一段)一览-全球微速讯2023-06-27
- 坐月子注意事项和饮食(坐月子注意事项)2023-06-27
- 百度CTO王海峰:新增插件机制,文心一言将逐步向开发者开放插件生态2023-06-27
- 天天百事通!蔚来手机专利公布 卖7000多2023-06-27
- 如何推进住宅小区环境综合治理?上海浦东这样做_焦点消息2023-06-27
- 快播:舆论观察丨工信部明确全面推进6G技术 研发舆论期盼6G带来巨大变革2023-06-27
- OpenAI 计划将 ChatGPT 变成「超级智能个人工作助理」与微软展开竞争2023-06-27
- 甘肃玉门:设施林果让群众搭上“致富快车”2023-06-27
- 顺利退: 关于股票进入退市整理期交易的第三次风险提示公告2023-06-27
- 福建发布全国首个《幸福河湖评价导则》省级地方标准2023-06-27
- 人工智能重塑数字世界 推动数实融合高质量发展2023-06-27
- 环球视点!健康风险评估包括的三个基本模块是_健康风险2023-06-27
- 率先出货!海目星光伏接线盒激光焊接设备批量交付客户!2023-06-27
- 金壮龙会见突尼斯通信技术部部长尼扎尔·本·纳吉 环球观焦点2023-06-27
- 《中庸》 全球新资讯2023-06-27
- 华康股份(605077)6月27日主力资金净卖出395.95万元 即时看2023-06-27
- 世界通讯!海油发展(600968.SH)2022年度权益分派:每股派0.085元 7月5日股权登记2023-06-27
- 苹果手机一直显示白苹果怎么办_当前热门2023-06-27
- C-STAR非洲青年创新创业计划暨清华大学青年领导力对话举办|当前讯息2023-06-27