专栏首页智能大石头魔方NewLife.Cube升级v2.0

魔方NewLife.Cube升级v2.0

 魔方是一套集成权限管理的MVC管理后台,最具特色功能是模版覆盖机制,是XCode实体类的最佳搭档!

v2.0.2017.1126   借助Ajax支持高级操作,如:删除选中、批量启用禁用等

用户管理增加批量启用、批量禁用,看看效果:

image.png

选中要操作的行,上方工具栏的批量操作区域按钮会从灰变亮,(取消所有选中时该区域会变灰)。点击“批量启用”,后台发起Ajax请求到EnableSelect动作,处理完成后显示提示文本,然后刷新页面。

根据魔方的模版覆盖机制,在User视图下增加名为 _List_Toolbar_Batch.cshtml 的视图

image.png

表示在显示User的列表页时,使用该视图覆盖全局默认视图,(_List_Toolbar_Batch.cshtml的全局默认视图其实为空)。

该批量操作视图位于工具栏第二位,左边是添加按钮,右边是查询条件。

视图内容如下:

@using NewLife.Common;
@{
    var user = ViewBag.User as IUser ?? User.Identity as IUser;
    var fact = ViewBag.Factory as IEntityOperate;
    var enableSelect = this.EnableSelect();
}
@if (enableSelect)
{
    <button type="button" class="btn btn-purple btn-sm" data-action="enable" data-url="@Url.Action("EnableSelect")" data-fields="keys" disabled>
        批量启用
    </button>
    <button type="button" class="btn btn-purple btn-sm" data-action="enable" data-url="@Url.Action("DisableSelect")" data-fields="keys" disabled>
        批量禁用
    </button>
}

魔方会拦截所有带有data-action的按钮和超链接,改为ajax向后端发起请求。

data-fields 表示发起请求时需要携带的参数所在控件的名字,keys就是每一行开头checkbox的控件名。

服务端代码如下:

/// <summary>批量启用</summary>
/// <param name="keys"></param>
/// <returns></returns>
[EntityAuthorize(PermissionFlags.Update)]
public ActionResult EnableSelect(String keys)
{
    var count = 0;
    var ids = Request["keys"].SplitAsInt();
    if (ids.Length > 0)
    {
        //var list = UserX.FindAll(UserX._.ID.In(ids));
        Parallel.ForEach(ids, id =>
        {
            var user = UserX.FindByID(id);
            if (user != null && !user.Enable)
            {
                user.Enable = true;
                user.Save();

                Interlocked.Increment(ref count);
            }
        });
    }

    return JsonRefresh("共启用[{0}]个用户".F(count));
}

MVC处理keys时只取第一个,不得不改用Request["keys"]。

keys里面就是选中项的主键,这里用Parallel并行计算来进行批量更新。

来看看后端响应:

image.png

魔方统一了Ajax响应格式,result表示成功失败,data是提示文本,特殊场合还可以响应结构化数据,url表示显示文本后要跳转的url,[refresh]特指刷新当前页。

借助魔方v2.0的Ajax机制,普通C#工程师可以无需编写js脚本即可完成各种高级操作!

源码地址:http://git.NewLifeX.com/NewLife/X

海外地址:https://github.com/NewLifeX/X

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手工调试自定义控件各主要方法执行顺序(分运行时和设计时)

    继承TextBox,override各个方法,分别下断点调试。 ctor为构造函数 在构造函数中,通过代码: this.Text = (new Random(D...

    大石头
  • [NewLife.XCode]高级增删改

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简...

    大石头
  • [NewLife.XCode]数据初始化

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简...

    大石头
  • 【Pytorch】笔记三:数据读取机制与图像预处理模块

    疫情在家的这段时间,想系统的学习一遍 Pytorch 基础知识,因为我发现虽然直接 Pytorch 实战上手比较快,但是关于一些内部的原理知识其实并不是太懂,这...

    阿泽 Crz
  • 【短文本聚类】TextCluster:短文本聚类预处理模块 Short text cluster

    项目地址,阅读原文可以直达,欢迎参与和Star: https://github.com/RandyPen/TextCluster 这个项目的作者是AINLP交...

    zenRRan
  • 通用设计:指挥调度系统——复杂行动的大脑与神经

    对于B端或G端用户,我们描述了数据共享平台(用户数据的采集与整理),信息展示系统(数据的展示)的设计思路,在这篇文章中将侧重于描述信息的传递与应用。这里指的不是...

    物流IT圈
  • 聊聊Elasticsearch的CircuitBreakerService

    本文主要研究一下Elasticsearch的CircuitBreakerService

    codecraft
  • 聊聊Elasticsearch的CircuitBreakerService

    本文主要研究一下Elasticsearch的CircuitBreakerService

    codecraft
  • Spring Boot 配置接口 WebMvcConfigurer

    WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的xml配置文件形式进行针对框架个性化定制 基...

    JavaEdge
  • 第214天:Angular 基础概念

      + https://github.com/angular/angular.js/releases

    半指温柔乐

扫码关注云+社区

领取腾讯云代金券