首頁(yè) > 關(guān)注 > > 正文

              Asp.net core使用Razor試圖引擎編寫(xiě)TagHelper-環(huán)球看點(diǎn)

              2023-06-27 20:20:49    來(lái)源:博客園

              之前使用wtm來(lái)進(jìn)行快速開(kāi)發(fā)


              (相關(guān)資料圖)

              wtm框架見(jiàn):

              https://wtmdoc.walkingtec.cn/

              其前端選擇Layui的情況下有大量的TagHelper,大幅度提高了開(kāi)發(fā)效率

              雖然已有的組件很豐富但也不能完全覆蓋所有的需求,這個(gè)時(shí)候就需要自己寫(xiě)TagHelper。

              參考了WTM源碼,和微軟官方文檔

              TagHelper雖然使用起來(lái)方便,但是大量的拼接字符串編寫(xiě)體驗(yàn)和可讀性都不是很好。

              理想的情況是能充分利用.net中強(qiáng)大的Razor引擎來(lái)編寫(xiě)TagHelper,從而更方便的進(jìn)行組件復(fù)用。

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

              以封裝一個(gè)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視圖引擎編寫(xiě)可讀性就好了很多。

              @using TagHelpers;@model WangEditorConfig

              關(guān)鍵詞:

              上一篇:敬禮娃娃高考斬獲好成績(jī) 當(dāng)前頭條
              下一篇:最后一頁(yè)

              熱點(diǎn)話題

              熱點(diǎn)推薦

              頭條

              ? 亚洲视频无码高清在线| 亚洲一级毛片在线播放| 亚洲午夜理论片在线观看| 亚洲最新在线视频| 亚洲久本草在线中文字幕| 亚洲av激情无码专区在线播放| 国产亚洲精品va在线| 亚洲成色在线综合网站| 国产亚洲精品一品区99热| 亚洲av无码专区国产乱码在线观看 | 麻豆亚洲av熟女国产一区二| 亚洲邪恶天堂影院在线观看| 久久亚洲日韩精品一区二区三区| 亚洲邪恶天堂影院在线观看| 亚洲第一精品电影网| 亚洲成a人片7777| 亚洲一级黄色大片| 亚洲日日做天天做日日谢| 亚洲一区二区三区写真| 亚洲色欲啪啪久久WWW综合网| 亚洲人成网站在线在线观看| 亚洲爆乳大丰满无码专区| 国产成人亚洲精品蜜芽影院| 亚洲精品无码专区2| 久久久无码精品亚洲日韩软件| 在线亚洲人成电影网站色www| 亚洲精品成人无码中文毛片不卡| 国产V亚洲V天堂A无码| 亚洲国产精品久久久久网站| 亚洲黄色网址在线观看| 亚洲人成网网址在线看| 国产午夜亚洲精品| gogo全球高清大胆亚洲| 红杏亚洲影院一区二区三区| 亚洲成AV人片天堂网无码| 久久久久久亚洲精品成人| 国产精品亚洲精品青青青| 亚洲成a人片在线观看天堂无码| 亚洲第一区精品观看| 亚洲色成人WWW永久网站| 亚洲欧洲一区二区|