FineUICore也出了一段时间了,我把FineUIMVC的代码整理移植了下,发现除了把FineUIMVC替换成FineUICore外其他代码都能用。以前写过FineUIMVC的扩展,现在我将一步步整理到FineUICore中并在此作为记录以供大家学习。
在开发项目中,有很多代码是重复冗余的(原谅我没基础过高深的框架),比如当用到Grid控件,往往用到增删改按钮,我在这里做了扩展,前天通过几行代码生成按钮并与后台交互,代码可能只适用我的开发环境,主要记录的是方法。
这里前台只的是 .cshtml文件,通常给Grid控件添加按钮是放在Toolbar的Items里,如下
.Toolbars( F.Toolbar().Items( F.Button().Text("新增").ID("btnadd").Icon(Icon.Add).OnClientClick(""), F.Button().Text("修改").ID("btnedit").Icon(Icon.ApplicationEdit).OnClientClick(""), F.Button().Text("删除").ID("btndel").Icon(Icon.Delete).OnClientClick("") ) )
如果要扩展,通过后台生成Items里的Button,首先要查看Items接收什么参数(带括号明显是个方法,括号里就是参数),点击Items按F12,飞过去,有两段,如下
// // 摘要: // 子控件集合 // // 参数: // extensions: public ToolbarExtension Items(params IControlBaseExtension[] extensions); // // 摘要: // 子控件集合 // // 参数: // items: public ToolbarExtension Items(params ControlBase[]items);
明显是重载,所以我们的扩展方法返回IControlBaseExtension[]或ControlBase[]都可以。
然后再给方法取个名字叫DefaultGridBtn,参数是Grid的ID
方法作为FineUI的扩展,是通过F点出来的,如下
.Toolbars( F.Toolbar().Items( //生成默认的Grid增删改按钮 F.DefaultGridBtn("Grid1") ) )
新建一个类
using Microsoft.AspNetCore.Html; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Text.Encodings.Web; //命名空间要用FineUICore namespace FineUICore { /// <summary> /// FineUICore扩展 /// </summary> public static class FineUIEx { } }
为F做扩展,要找到F是谁,var F = Html.F(); 每个页面都有,点击F()按F12,飞过去,有好几个重载,一个就够了,如下
// // 摘要: // FineUICore的扩展方法工厂 // // 参数: // helper: // // 类型参数: // TModel: public static UIExtension<TModel, TModel> F<TModel(this IHtmlHelper<TModel> helper);
F的类型是 UIExtension<TModel, TModel>,就是给他做扩展,所以有如下方法
/// <summary> /// 返回默认Grid增删改按钮的默认配置 参数(GridID) /// </summary> /// <param name="F">当前的F</param> /// <param name="gridid">Grid的ID</param> /// <returns>按钮的集合</returns> public static ControlBase[] DefaultGridBtn(this UIExtension<dynamic, dynamic> F, string gridid) { List<ControlBase> DefaultBtn = new List<ControlBase>(); return DefaultBtn.ToArray(); }
目前就前台就能点出来了,下面向里面放按钮就可以了
/// <summary> /// 返回默认Grid增删改按钮的默认配置 参数(GridID) /// </summary> /// <param name="F">当前的F</param> /// <param name="gridid">Grid的ID</param> /// <returns></returns> public static ControlBase[] DefaultGridBtnEx(this UIExtension<dynamic, dynamic> F, string gridid) { List<ControlBase> DefaultBtn = new List<ControlBase>(); var v = F.Button().ID(gridid + "new").Text("新增").OnClientClick("").IconFont(IconFont.Plus).Source; DefaultBtn.Add(v); v = F.Button().ID(gridid + "edit").Text("修改").OnClientClick("").IconFont(IconFont.Pencil).Source; DefaultBtn.Add(v); v = F.Button().ID(gridid + "delete").Text("删除").OnClientClick("").IconFont(IconFont.Minus).Source; DefaultBtn.Add(v); return DefaultBtn.ToArray(); }
前台触发了什么,当然也是封装好的,下一此再放出来,配合扩展自动生成的window窗体控件,以及表单控件Form的扩展,让我们拥有自己的快速开发框架。
静态博客是个好东西,我会把所有我写完的扩展都放出来,然后开源(尽量),但是首先,我要给这个静态博客做个留言板。
本文作者:没想好
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!