俗话说的好:没想好没事就爱造轮子,尤其是FineUI的扩展,那必须要出手改改,不改就难受,即使不会也得一点点摸,这不FineUI11出来,分析就是过程,重写才是目的,即使不用也得折腾;俗话结束。
要写扩展从标签入手,照着写就行了
来看这种标签的写法
@section body { <f:Button Text="缺省按钮" CssClass="marginr" runat="server" /> }
有个缺点🤔,没法F12,没反应,跳不过去,结束🔚。
怎么办呢,非常简单,挨
个
试
💡
明显就找到了:ButtonTagHelper
;
长这个样子, 扒底裤+1🙈
[HtmlTargetElement("f:Button")] [RestrictChildren("Menu", new string[] { "Listeners", "Attributes" })] public class ButtonTagHelper : BoxComponentTagHelper, ISourceMenuTagHelper { // // 摘要: // 按钮颜色 [HtmlAttributeName("ButtonColor")] public ButtonColor ButtonColor { get { return Source.ButtonColor; } set { Source.ButtonColor = value; } } }
可以看出来HtmlTargetElement
里就是签,HtmlAttributeName
这个就是属性,特性来的,这时再用类的扩展,长脑子🧠都猜的到,不用试也知道是不行的 ❌
public static void Loading(this ButtonTagHelper btn, bool b) { PageContext.RegisterStartupScript($"F.ui.{btn.Source.ID}.setEnabled({b.ToString().ToLower()})"); }
我试了,不行,🔚
除非给类ButtonTagHelper
加属性,并且标记HtmlAttributeName
才可以在前台cshtml.cs
生效,但是扩展类的写法是添加不了属性的,只能给实例添加方法;所以这里只能新建类🆕,ButtonExTagHelper
继承ButtonTagHelper
就可以添加属性了,
[HtmlTargetElement("f:Button")] public class ButtonExTagHelper : ButtonTagHelper { [HtmlAttributeName("Loading")] public bool Loading { get; set; } }
但是这时 前台还是红色的,说明没生效😞
猜测下可能的原因,如果没生效,那原因可能是我写的代码没有起作用😕;
所以解决办法就很明显了:必要新建个类库项目引用;并且命名空间不能是FineUICore
;然后在_ViewImports.cshtml
addTagHelper
就行了;(我也不知道怎么想到的,先天搬砖圣体💎
)
我现在可以让自定义的属性提示出来了,说明生效了,也指定了属性的类型,那么怎么让这个属性产生行为呢,怎么让这个属性在前台确实参与了绘制。
还是要看 ButtonTagHelper
是怎么写的,除去私有的字段,类还包括其他的成员🌟
//按钮标签 [HtmlTargetElement("f:Button")] [RestrictChildren("Menu", new string[] { "Listeners", "Attributes" })] public class ButtonTagHelper : BoxComponentTagHelper, ISourceMenuTagHelper { //构造函数 public ButtonTagHelper() : base(new Button()) { } //按钮颜色 [HtmlAttributeName("ButtonColor")] public ButtonColor ButtonColor { get{return Source.ButtonColor;} set{Source.ButtonColor = value;} } //标签处理前执行 protected override void PreProcess(TagHelperContext context, TagHelperOutput output) { base.PreProcess(context, output); } }
忙猜PreProcess
就是控制输出的,首先我输出的应该是段js
,并且加入到FineUI自己的流中,所以我需要PageContext.RegisterStartupScript
进行注册;
把扩展类改一改✍️
[HtmlTargetElement("f:Button")] public class ButtonExTagHelper : ButtonTagHelper { /// <summary> /// 随便写的属性 /// </summary> [HtmlAttributeName("Loading")] public bool Loading { get; set; } //标签处理前执行 protected override void PreProcess(TagHelperContext context, TagHelperOutput output) { if (Loading) { PageContext.RegisterStartupScript( $"console.log('Loading :>>{Loading}');"); } base.PreProcess(context, output); } }
可以看到,确实输出了
镜头切换,远景,播放舒缓的背景音乐,没想好坐在半山腰感受着宁静的夕阳,山坡下是大片成熟的库尔勒香梨,镜头切换,没想好脸部特别,一脸平静;
声音中断,黑屏,然后显示画面🎺
f:Button
被绘制了两遍!
未完待续🔜
本文作者:没想好
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!