添加增删查改功能

插件提供了根据数据库中的数据快速构建后台增删查改页面的功能, 构建时需要使用CrudAdminAppControllerBase.
以下的例子支持自动分页, 自动提供和检查权限, 自动生成添加编辑删除和恢复按钮.

添加src\Controllers\ExampleCrudController.cs

[ExportMany]
public class ExampleCrudController : CrudAdminAppControllerBase<ExampleTable, long> {
    // Name和Url必须提供
    public override string Name { get { return "ExampleCRUDApp"; } }
    public override string Url { get { return "/admin/example_crud_app"; } }
    // 可选, 如果需要指定图标颜色和内容
    public override string TileClass { get { return "tile bg-navy"; } }
    public override string IconClass { get { return "fa fa-rocket"; } }
    // 权限一般不需要手动指定, 会根据名称生成"查看","修改","删除","永久删除"权限

    // 获取添加和编辑使用的表单
    protected override IModelFormBuilder GetAddForm() { return new Form(); }
    protected override IModelFormBuilder GetEditForm() { return new Form(); }

    // 获取搜索列表使用的处理器
    protected override IAjaxTableHandler<ExampleTable, long> GetTableHandler() { return new TableHandler(); }

    public class TableHandler : AjaxTableHandlerBase<ExampleTable, long> {
        public override void BuildTable(AjaxTableBuilder table, AjaxTableSearchBarBuilder searchBar) {
            table.StandardSetupFor<ExampleCrudController>(); // 设置表格
            searchBar.StandardSetupFor<ExampleCrudController>("Name"); // 设置搜索栏
        }

        public override void OnQuery(
            AjaxTableSearchRequest request, ref IQueryable<ExampleTable> query) {
            if (!string.IsNullOrEmpty(request.Keyword)) {
                query = query.Where(q => q.Name.Contains(request.Keyword)); // 按关键词过滤
            }
        }

        public override void OnSelect(
            AjaxTableSearchRequest request, IList<EntityToTableRow<ExampleTable>> pairs) {
            foreach (var pair in pairs) {
                pair.Row["Id"] = pair.Entity.Id; // 选择Id
                pair.Row["Name"] = pair.Entity.Name; // 选择名称
                pair.Row["CreateTime"] = pair.Entity.CreateTime.ToClientTimeString(); // 选择创建时间
                pair.Row["Deleted"] = pair.Entity.Deleted ? EnumDeleted.Deleted : EnumDeleted.None; // 选择删除状态
            }
        }

        public override void OnResponse(
            AjaxTableSearchRequest request, AjaxTableSearchResponse response) {
            response.Columns.AddIdColumn("Id").StandardSetupFor<ExampleCrudController>(request); // Id列
            response.Columns.AddNoColumn(); // 序号列, 页序号*页数量+数据位置(从1开始)
            response.Columns.AddMemberColumn("Name", "45%"); // 名称列
            response.Columns.AddMemberColumn("CreateTime"); // 添加时间列
            response.Columns.AddEnumLabelColumn("Deleted", typeof(EnumDeleted)); // 删除状态列
            response.Columns.AddActionColumn().StandardSetupFor<ExampleCrudController>(request); // 操作列
        }
    }

    public class Form : EntityFormBuilder<ExampleTable, long, Form> {
        [Required]
        [StringLength(100)]
        [TextBoxField("Name", "Please enter name")]
        public string Name { get; set; }

        protected override void OnBind(ExampleTable bindFrom) {
            Name = bindFrom.Name; // 绑定名称
        }

        protected override object OnSubmit(ExampleTable saveTo) {
            saveTo.Name = Name; // 设置名称
            if (saveTo.Id <= 0) {
                saveTo.CreateTime = DateTime.UtcNow; // 设置创建时间
            }
            return this.SaveSuccessAndCloseModal();
        }
    }
}

效果如图

自动生成的权限如图