LSJ_NHibernate(三)

先放狗...先放图,再说话...

先把H+的框架往上一套,看上去还不错(主要是本人头像)先弄一个增删改查出来再说

文件结构上,我就分了两级,因为用了iframe嵌套,iframe里面的内容页我都放templet里面了,单独调试某个页面也非常方便,当然喜欢根据功能板块分的也行,随个人嗜好.

表格使用的是bootstrap-table插件,主要功能是 分页,局部刷新,导出......

由于不喜欢使用面包屑,页面乱跳,所以我把增删改查功能都放在一个页面,每个页面对应一个js文件

先把怎么玩bootstrap-table的代码copy过来

$(function () {

    //1.初始化Table
    var oTable = new TableInit();
    oTable.Init();

    //2.初始化Button的点击事件
    var oButtonInit = new ButtonInit();
    oButtonInit.Init();

});
var TableInit = function () {
    var oTableInit = new Object();
    //初始化Table
    oTableInit.Init = function () {
        $(‘#tb_departments‘).bootstrapTable({
            url: RequestListUrl,                 //请求后台的URL(*)
            method: ‘post‘,                      //请求方式(*)
            toolbar: ‘#toolbar‘,                //工具按钮用哪个容器
            striped: true,                      //是否显示行间隔色
            cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
            pagination: true,                   //是否显示分页(*)
            sortable: false,                     //是否启用排序
            sortOrder: "asc",                   //排序方式

            queryParams: oTableInit.queryParams,//传递参数(*)
            sidePagination: "server",           //分页方式:client客户端分页,server服务端分页(*)
            pageNumber:1,                       //初始化加载第一页,默认第一页
            pageSize: 10,                       //每页的记录行数(*)

            pageList: [10, 25, 50, 100],        //可供选择的每页的行数(*)
            search: false,                       //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
            strictSearch: true,
            showColumns: true,                  //是否显示所有的列
            showRefresh: true,                  //是否显示刷新按钮
            minimumCountColumns: 2,             //最少允许的列数
            clickToSelect: true,                //是否启用点击选中行
            height: 600,                        //行高,如果没有设置height属性,表格自动根据记录条数觉得表格高度
            uniqueId: "ID",                     //每一行的唯一标识,一般为主键列
            showToggle:true,                    //是否显示详细视图和列表视图的切换按钮
            cardView: false,                    //是否显示详细视图
            detailView: false,                   //是否显示父子表
            columns: [{
                checkbox: true
            }, {
                field: ‘user_name‘,
                title: ‘用户名‘
            }, {
                field: ‘nick_name‘,
                title: ‘昵称‘
            }, {
                field: ‘mobile‘,
                title: ‘手机号‘
            }, {
                field: ‘email‘,
                title: ‘邮箱‘
            }, ]

        });
    };
    //得到查询的参数
    oTableInit.queryParams = function (params) {
        var temp = {   //这里的键的名字和控制器的变量名必须一直,这边改动,控制器也需要改成一样的
            limit: params.limit,   //页面大小
            offset: params.offset,  //页码
            user_name: $("#user_name").val(),
            mobile: $("#mobile").val()
        };
        return temp;
    };
    return oTableInit;
};

非常的简单,这里吧一些路径提取出来,以后类似页面就可以直接copy了

//请求地址(列表)
var RequestListUrl = "/Templet/GetUserList";
//请求地址(单条记录)
var RequestUrl = "/Templet/GetUser";
//请求地址(删除记录)
var RequestDelUrl = "/Templet/DelUser";
//请求地址(修改)
var RequestEditUrl = "EditUser";
//请求控制器(添加)
var RequestAddUrl = "AddUser"

然后就是增删改查了,也是很容易,都是$.post提交到控制器

var ButtonInit = function () {
    var oInit = new Object();
    var postdata = {};

    oInit.Init = function () {
        $("#btn_add").click(function () {
            $("#myModalLabel").text("新增用户");
            $("#myModal").find(".form-control").val("");
            $(‘#myModal‘).modal()
        });

        $("#btn_edit").click(function () {
            var arrselections = $("#tb_departments").bootstrapTable(‘getSelections‘);
            if (arrselections.length > 1) {
                var d = dialog({
                    fixed: true,
                    content: "只能选择一行进行编辑",
                    padding: 30

                });
                d.show();
                //关闭提示模态框
                setTimeout(function () {
                    d.close().remove();
                }, 2000);
                return;
            }
            if (arrselections.length <= 0) {
                var d = dialog({
                    fixed: true,
                    content: "请选择有效数据",
                    padding: 30

                });
                d.show();
                //关闭提示模态框
                setTimeout(function () {
                    d.close().remove();
                }, 2000);
                return;
            }
            $("#myModalLabel").text("编辑");
            $.post(RequestUrl, { id: arrselections[0].id }, function (data) {
                $("#id").val(data.id);
                $("#txt_user_name").val(data.user_name);
                $("#txt_mobile").val(data.mobile);
                $("#txt_email").val(data.email);
                $("#txt_nick_name").val(data.nick_name);
                $("#txt_password").val(data.password);
                $("#txt_passwords").val(data.password);
                $("#form0").attr("action", RequestEditUrl);
            });
            $(‘#myModal‘).modal();
        });

        $("#btn_delete").click(function () {
            var arrselections = $("#tb_departments").bootstrapTable(‘getSelections‘);
            if (arrselections.length <= 0) {
                var d = dialog({
                    fixed: true,
                    content: "请选择有效数据",
                    padding: 30

                });
                d.show();
                //关闭提示模态框
                setTimeout(function () {
                    d.close().remove();
                }, 2000);
                return;
            }

            var d = dialog({
                title: ‘系统提示‘,
                padding: 30,
                content: ‘确定要删除这些数据?‘,
                okValue: ‘确定‘,
                ok: function () {
                    this.title(‘提交中…‘);
                    var ids = "";
                    $(arrselections).each(function () {
                        ids += this.id + ",";
                    })
                    if (ids.length > 1)//去掉最后一个,
                    {
                        ids = ids.substring(0, ids.length - 1);
                    }

                    $.post(RequestDelUrl, { ids: ids }, function (data) {
                        var e = dialog({
                            padding: 30,
                            content: data.msg
                        });
                        //显示模态框
                        e.show();
                        //先关闭主窗体
                        $(‘#myModal‘).modal(‘hide‘)
                        //刷新数据
                        $(‘#tb_departments‘).bootstrapTable(‘refresh‘, { url: RequestListUrl });
                        //关闭提示模态框
                        setTimeout(function () {
                            e.close().remove();
                        }, 2000);
                    });
                },
                cancelValue: ‘取消‘,
                cancel: function () { }
            });
            d.show();

        });

        $("#btn_query").click(function () {
            $("#tb_departments").bootstrapTable(‘refresh‘);
        });
    };

    return oInit;
};

后台就不贴具体实现代码了,浪费位置

[HttpPost]
public JsonResult GetUserList(int limit = 10, int offset = 1, string user_name = "", string mobile = "")

继续放狗...

仔细的朋友可能发现这个这个提示比前面的丑一点点,好吧,这是我自定义的,在做这个的时候,我遇到一个大坑,就是post提交表单的时候假设要验证用户名是否存在,如果存在则阻止表单提交,折腾了好久都没搞好,后来使用jquery.unobtrusive-ajax.js,可以在提交表单的时候进行验证,添加成功后刷新表格数据

       //刷新数据
            $(‘#tb_departments‘).bootstrapTable(‘refresh‘, { url: ‘/Templet/GetUserList‘ });

修改与删除与这类似,这里就不重复说明了.

时间: 2024-10-29 05:56:02

LSJ_NHibernate(三)的相关文章

angularJs中关于ng-class的三种使用方式说明

在开发中我们通常会遇到一种需求:一个元素在不同的状态需要展现不同的样子. 而在这所谓的样子当然就是改变其css的属性,而实现能动态的改变其属性值,必然只能是更换其class属性 这里有三种方法: 第一种:通过数据的双向绑定(不推荐) 第二种:通过对象数组 第三种:通过key/value 下面简单说下这三种: 第一种:通过数据的双向绑定 实现方式: function changeClass(){   $scope.className = "change2"; } <div clas

三百六十度全景图如何拍摄?

三百六十度全景图如何拍摄?随着全景技术的发展,全景拍摄也成为了一种十分新潮的摄影方式.全景摄影也有很多学问,而且随着全景照片的用途越来越多,拍摄全景的设备也越来越多.今天我们就介绍几种十分另类的360全景图拍摄方法,这些酷雷曼360全景图拍摄方法让你大开眼界. 工具/原料 相机 鱼眼镜头 云台 三角支架 方法/步骤 1 吊锤辅助360全景图拍摄方法 吊线保证拍摄时相机以节点旋转,使用吊线进行全景拍摄线不要太长,50CM以内比较容易控制,有时也到一米多在胸口位置进行拍摄,重锤容易晃动,很难对准.吊

关于SVM数学细节逻辑的个人理解(三) :SMO算法理解

第三部分:SMO算法的个人理解 接下来的这部分我觉得是最难理解的?而且计算也是最难得,就是SMO算法. SMO算法就是帮助我们求解: s.t.   这个优化问题的. 虽然这个优化问题只剩下了α这一个变量,但是别忘了α是一个向量,有m个αi等着我们去优化,所以还是很麻烦,所以大神提出了SMO算法来解决这个优化问题. 关于SMO最好的资料还是论文<Sequential Minimal Optimization A Fast Algorithm for Training Support Vector

三件软件作品评价

先交代三件软件作品的相关资料.   软件一 软件二 软件三 软件名称 蜗牛词典APP 24点小游戏APP 物理实验网站 学校 2017集美大学1412软工实践  集美大学1411 北京航天航空大学计算机学院 团队名称 SNS1412 hexagon 软剑攻城队 团队博客地址 http://www.cnblogs.com/jmu-sns/ http://www.cnblogs.com/24app/ http://www.cnblogs.com/buaase/ Git地址 https://codin

MVC4 自定义错误页面(三)

一.概述 MVC4框架自带了定义错误页,该页面位于Shared/Error,该页面能够显示系统未能捕获的异常,如何才能使用该页面: 二.使用步骤: 1.配置WebConfig文件,在System.Web节点下加上 <customErrors mode="On"  defaultRedirect="~/Shared/Error" /> 翻阅一些大神写的博客,在他们的博客中指出defaultRedirect是指向错误页面的URL,可是经过本人测试的时候,发现

Django(三) ORM 数据库操作

比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ORM 字段类型 1.字段类型介绍 2.字段参数介绍 3.Django ORM 外键操作 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 ORM:关系对象映射.定义一个类自动生成数

微信 小程序布局 左右三区块

/* 3三区块部分 *************/ .wear-diamonds{ display: flex; width: 100%; height: 300rpx; } .wear-diamonds>view{ width: 50%; height:100%; border: 1px solid black; } .diamonds-right>view{ width: 100%; height: 50%; border: 1px solid #000; } //-------------

Redis实战(三)Redis主从复制

从架构 1.主从架构图 2.通过命令 mkdir redisCluster创建redis集群文件夹 3.通过命令mkdir 6380   mkdir 6381   mkdir 6382在redisCluster文件夹下创建三个文件夹 4.通过以下命令将redis.conf分别拷贝到6380.6381. 6382文件夹下 cp /usr/local/redis/redis-3.0.2/redis.conf  ./6380 cp /usr/local/redis/redis-3.0.2/redis.

算法 排序lowB三人组 冒泡排序 选择排序 插入排序

参考博客:基于python的七种经典排序算法   [经典排序算法][集锦]     经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一.排序的基本概念和分类 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法. 排序的稳定性: 经过某种排序后,如果两个记录序号同等,且两者在原无序记录中的先后秩序依然保持不变,则称所使用的排序方法是稳定的,反之是不稳定