ABP+AdminLTE+Bootstrap Table權限管理系統(tǒng)第十一節(jié)--bootstrap table之用戶管理列表

ABP+AdminLTE+Bootstrap Table權限管理系統(tǒng)一期
Github:https://github.com/Jimmey-Jiang/ABP-ASP.NET-Boilerplate-Project-CMS
前往博客園總目錄:ABP+AdminLTE+Bootstrap Table權限管理系統(tǒng)一期

這張開始bootstrap table,引入項目有兩種方法,一種是直接去官網下載
地址:http://bootstrap-table.wenzhixin.net.cn/
另一種是Nuget引入.


然后就是把js引用到項目中來,其實Bootstrap js 還有jQuery我們在模板頁已經引進了,這里只需要引入bootstrap table相關的js以及中文包就可以了

<link href="~/Scripts/Content/bootstrap-table/bootstrap-table.css" rel="stylesheet" />
<script src="~/Scripts/Content/bootstrap-table/bootstrap-table.js"></script>
<script src="~/Scripts/Content/bootstrap-table/locale/bootstrap-table-zh-CN.js"></script>

前提是創(chuàng)建控制器userinfo,添加index視圖里面處理,創(chuàng)建視圖的時候自動選擇_Layout作為模板頁.引入需要的文件之后淮椰,我們最重要的就是定義一個空的table愚争,如上的 <table id="tb_departments"></table> 攀涵。當然Bootstrap table還提供了一種簡介的用法喻旷,直接在table標簽里面定義類似“data-...”等相關屬性龄捡,就不用再js里面注冊了耘成,但我覺得這種用法雖然簡單赞厕,但不太靈活艳狐,遇到父子表等這些高級用法的時候就不太好處理了,所以咱們還是統(tǒng)一使用在js里面初始化的方式來使用table組件皿桑。

$(function () {



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

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

    });
    var Url = "@Url.Action("GetUsersList")";
    var TableInit = function () {
        var oTableInit = new Object();
        //初始化Table
        oTableInit.Init = function () {
            $('#tb_departments').bootstrapTable({
               // url: '../User/GetUsersList',
                url: Url,         //請求后臺的URL(*)
                method: 'get',                      //請求方式(*)
                toolbar: '#toolbar',                //工具按鈕用哪個容器
                striped: true,                      //是否顯示行間隔色
                cache: false,                       //是否使用緩存毫目,默認為true蔬啡,所以一般情況下需要設置一下這個屬性(*)
                pagination: true,                   //是否顯示分頁(*)
                sortable: false,                     //是否啟用排序
                sortOrder: "asc",                   //排序方式
                queryParams: oTableInit.queryParams,//傳遞參數(*)
                sidePagination: "server",           //分頁方式:client客戶端分頁,server服務端分頁(*)
                pageNumber: 1,                       //初始化加載第一頁镀虐,默認第一頁
                pageSize: 2,                       //每頁的記錄行數(*)
                pageList: [10, 25, 50, 100],        //可供選擇的每頁的行數(*)
                search: true,                       //是否顯示表格搜索箱蟆,此搜索是客戶端搜索,不會進服務端刮便,所以空猜,個人感覺意義不大
                strictSearch: true,
                showColumns: true,                  //是否顯示所有的列
                showRefresh: true,                  //是否顯示刷新按鈕
                minimumCountColumns: 2,             //最少允許的列數
                clickToSelect: true,                //是否啟用點擊選中行
                height: 500,                        //行高,如果沒有設置height屬性恨旱,表格自動根據記錄條數覺得表格高度
                uniqueId: "ID",                     //每一行的唯一標識辈毯,一般為主鍵列
                showToggle: true,                    //是否顯示詳細視圖和列表視圖的切換按鈕
                cardView: false,                    //是否顯示詳細視圖
                detailView: false,                   //是否顯示父子表
                columns: [{
                    checkbox: true
                }, {
                    field: 'UserName',
                    title: '姓名'
                }, {
                    field: 'Email',
                    title: '郵箱'
                }, {
                    field: 'Phone',
                    title: '手機'
                }, {
                    field: 'Address',
                    title: '地址'
                }, ]
            });
        };

        //得到查詢的參數
        oTableInit.queryParams = function (params) {
            var temp = {   //這里的鍵的名字和控制器的變量名必須一直,這邊改動搜贤,控制器也需要改成一樣的
                limit: params.limit,   //頁面大小
                offset: params.offset,  //頁碼
                departmentname: $("#txt_search_departmentname").val(),
                statu: $("#txt_search_statu").val()
            };
            return temp;
        };
        return oTableInit;
    };

表格的初始化也很簡單谆沃,定義相關的參數即可。上面一些博主覺得重要的參數都加了注釋仪芒,并且初始化Table必須的幾個參數也用()做了標記唁影,如果你的表格也有太多的頁面需求,直接用必須的參數就能解決掂名。同樣据沈,在columns參數里面其實也有很多的參數需要設置,比如列的排序饺蔑,對齊卓舵,寬度等等。這些比較簡單膀钠,不會涉及表格的功能掏湾,看看API就能搞定。
這里需要注意的是@
Url.Action,*var Url = "@Url.Action("GetUsersList")";/ UserInfo/ GetUsersList,直接指定后臺的控制器里面的方法.

public class UserInfoController : Controller
    {
        private readonly IUserService _iUsersService;

        public UserInfoController(IUserService iUsersService)
        {

            _iUsersService = iUsersService;

        }
        // GET: Admin/UserInfo
        public ActionResult Index()
        {
            return View();
        }

        [DisableAbpAntiForgeryTokenValidation]
        [HttpGet]
        [DontWrapResult] //不需要AbpJsonResult
        public JsonResult GetUsersList()
        {
            string pageNumber = string.IsNullOrWhiteSpace(Request["pageNumber"]) ? "0" : Request["pageNumber"];
            string pageSize = string.IsNullOrWhiteSpace(Request["pageSize"]) ? "20" : Request["pageSize"];
            List<UserInfoDto> Userlist = new List<UserInfoDto>();
            Userlist = _iUsersService.GetAllList().ToList();
            int totaldata = Userlist.Count();
            Userlist = Userlist.Skip(int.Parse(pageNumber) * int.Parse(pageSize)).Take(int.Parse(pageSize)).ToList();
            var result = new { total = totaldata, rows = Userlist };
            return Json(result, JsonRequestBehavior.AllowGet);
        }
    }

這里有一點需要注意:如果是服務端分頁肿嘲,返回的結果必須包含total融击、rows兩個參數。漏寫或錯寫都會導致表格無法顯示數據雳窟。相反尊浪,如果是客戶端分頁,這里要返回一個集合對象到前端封救。當然我這里為了快捷,我沒有去服務里面處理分頁,直接在這里分頁,這種做法其實很low,按照之前的做法會專門封裝一個分頁DTO,然后添加自定義排序字段.我這里就不去處理了,有興趣的自己去弄一下,這些會在我下一個項目里面詳細講.這里我再網上找一張一圖片來看一下具體代碼的應用.



其實這些信息在API里面應該都有,自己看一下就可以了.
我這里分頁和菜單是自己寫的,crud的功能都是有的.

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

        oInit.Init = function () {
            //初始化頁面上面的按鈕事件
            //查詢角色
            $("#btn_query").click(function () {
                var actionUrl = "@Url.Action("GetUsersList")";
                m_pagerow = 0;
                $("#tb_departments").bootstrapTable('refresh', { url: actionUrl });

            });
            //新增角色
            $("#btn_add").click(function () {

                $("#id").val("");
                $("#txt_Surname").val("");
                $("#txt_Name").val("");
                $("#txt_UserName").val("");
                $("#txt_isDeleted").val("");

                $("#myModalLabel").text("新增");
                $('#myModal').modal();
            });
            //新增角色
            $("#btn_submit").click(function () {

                var actionUrl = "@Url.Action("Create")";
                var UserName = $("#txt_Surname").val();
                var Email = $("#txt_Name").val();
                var Phone = $("#txt_UserName").val();
                var isnull = $("#txt_isDeleted").val();
                var isDeleted = true;
                if (isnull=="") {
                    isDeleted = false;
                }
                var Id = $("#id").val() == "" ? 0 : $("#id").val();
                debugger;
                $.ajax({
                    type: 'post',
                    dataType: "Json",
                    url: actionUrl,
                    data: { Id: Id, UserName: UserName, Email: Email, Phone: Phone, isDeleted: isDeleted },
                    beforeSend: function (XMLHttpRequest) {
                    },
                    success: function (data, textStatus) { //請求成功后處理函數拇涤。
                        toastr.warning('操作成功!');
                        var actionUrl = "@Url.Action("GetUsersList")";
                        m_pagerow = 0;
                        $("#tb_departments").bootstrapTable('refresh', { url: actionUrl });
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                    }
                });
                });
            //編輯角色
            $("#btn_edit").click(function () {
                debugger;
                var arrselections = $("#tb_departments").bootstrapTable('getSelections');
                if (arrselections.length > 1) {
                    toastr.warning('只能選擇一行進行編輯');
                    return;
                }
                if (arrselections.length <= 0) {
                    toastr.warning('請選擇有效數據');
                    return;
                }
                $("#id").val(arrselections[0].Id);
                $("#txt_Surname").val(arrselections[0].UserName);
                $("#txt_Name").val(arrselections[0].Email);
                $("#txt_UserName").val(arrselections[0].Phone);
                $("#txt_isDeleted").val(arrselections[0].Id);

                $("#myModalLabel").text("修改");
                $('#myModal').modal();
                //ShowModal(actionUrl, param, "編輯角色");
            });
            //刪除角色
            $("#btn_delete").click(function () {
                var actionUrl = "@Url.Action("DelUserById")";
                var arrselections = $("#tb_departments").bootstrapTable('getSelections');
                if (arrselections.length > 1) {
                    toastr.warning('只能選擇一行進行編輯');
                    return;
                }
                if (arrselections.length <= 0) {
                    toastr.warning('請選擇有效數據');
                    return;
                }
                var Id = arrselections[0].Id;
                debugger;
                $.ajax({
                    type: 'post',
                    dataType: "Json",
                    url: actionUrl,
                    data: { Id:Id},
                    beforeSend: function (XMLHttpRequest) {
                    },
                    success: function (data, textStatus) { //請求成功后處理函數。
                        toastr.warning('操作成功!');
                        var actionUrl = "@Url.Action("GetUsersList")";
                        m_pagerow = 0;
                        $("#tb_departments").bootstrapTable('refresh', { url: actionUrl });
                    },
                    error: function (XMLHttpRequest, textStatus, errorThrown) {
                    }
                });
            });
            //權限授權
            $("#btn_authorize").click(function () {
                var arrselections = $("#tb_departments").bootstrapTable('getSelections');
                if (arrselections.length > 1) {
                    toastr.warning('只能選擇一個角色進行授權');
                    return;
                }
                if (arrselections.length <= 0) {
                    toastr.warning('請選擇有效數據');
                    return;
                }
                var actionUrl = "@Url.Action("AuthorizePermission")";
                var param = { id: arrselections[0].Id };
                ShowModal_Authorize(actionUrl, param, "權限授權");
            });
            //模態(tài)框中“權限授權”保存
            var $modal = $("#authorizeModal");
            $("#btnSave", $modal).click(function () {
                var actionUrl = "@Url.Action("AuthorizePermission")";
                SaveModal_Authorize(actionUrl);
            });
            //模態(tài)框中“新增編輯角色”保存
            var $formmodal = $("#modal-form");
            $("#btnSave", $formmodal).click(function () {
                var $tb = $("#tb_departments");
                SaveModal($tb);
            });

            /*******彈出表單*********/
            function ShowModal(actionUrl, param, title) {
                debugger;
                var $modal = $("#modal-form");
                //表單初始化
                $(".modal-title", $modal).html(title);
                $("#modal-content", $modal).attr("action", actionUrl);

                $.ajax({
                    type: "GET",
                    url: actionUrl,
                    data: param,
                    beforeSend: function () {
                    },
                    success: function (result) {
                        debugger;
                        $("#modal-content").html(result);
                        $('#modal-form').modal('show');
                    },
                    error: function () {

                    },
                    complete: function () {

                    }
                });
            }


        };

        return oInit;
    };

自定義菜單以及彈樣式及功能.

<section class="content-header">
    <h1>
        用戶明細
        <small>advanced cxdmles</small>
    </h1>
    <ol class="breadcrumb">
        <li><a href="#"><i class="fa fa-dashboard"></i> 主頁</a></li>
        <li><a href="#">用戶管理</a></li>
        <li class="active">用戶列表</li>
    </ol>

</section>
<section class="content">
    <div class="panel-body" style="padding-bottom:0px;">
        <div class="panel panel-default">
            <div class="panel-heading">查詢條件</div>
            <div class="panel-body">
                <form id="formSearch" class="form-horizontal">
                    <div class="form-group" style="margin-top:15px">
                        <label class="control-label col-sm-1" for="txt_search_departmentname">姓名</label>
                        <div class="col-sm-3">
                            <input type="text" class="form-control" id="txt_search_departmentname">
                        </div>
                        <label class="control-label col-sm-1" for="txt_search_statu">昵稱</label>
                        <div class="col-sm-3">
                            <input type="text" class="form-control" id="txt_search_statu">
                        </div>
                        <div class="col-sm-4" style="text-align:left;">
                            <button type="button" style="margin-left:50px" id="btn_query" class="btn btn-primary">查詢</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>

        <div id="toolbar" class="btn-group">
            <button id="btn_add" type="button" class="btn btn-success">
                <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>新增
            </button>
            <button id="btn_edit" type="button" class="btn btn-warning">
                <span class="glyphicon glyphicon-pencil" aria-hidden="true"></span>修改
            </button>
            <button id="btn_delete" type="button" class="btn btn-danger">
                <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>刪除
            </button>
            <button id="btn_authorize" type="button" class="btn btn-info ">
                <span class="glyphicon glyphicon-lock" aria-hidden="true"></span>授權
            </button>

        </div>
        <table id="tb_departments"></table>
    </div>


    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
                    <h4 class="modal-title" id="myModalLabel"></h4>
                </div>
                <div class="modal-body">

                    <div class="form-group">
                        <label for="txt_departmentname">姓名</label>
                        <input type="text" name="id" class="form-control" id="id" placeholder="id" style="display:none">
                        <input type="text" name="txt_departmentname" class="form-control" id="txt_Surname" placeholder="真實姓名">
                    </div>
                    <div class="form-group">
                        <label for="txt_parentdepartment">郵箱</label>
                        <input type="text" name="txt_parentdepartment" class="form-control" id="txt_Name" placeholder="姓名">
                    </div>
                    <div class="form-group">
                        <label for="txt_departmentlevel">手機</label>
                        <input type="text" name="txt_departmentlevel" class="form-control" id="txt_UserName" placeholder="部門級別">
                    </div>
                    <div class="form-group">
                        <label for="txt_departmentlevel">是否啟用</label>
                        <div class="checkbox">
                            <label>
                                <input type="checkbox" disabled="disabled">
                            </label>
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span>關閉</button>
                    <button type="button" id="btn_submit" class="btn btn-primary" data-dismiss="modal"><span class="glyphicon glyphicon-floppy-disk" aria-hidden="true"></span>保存</button>
                </div>
            </div>
        </div>
    </div>

</section>

這里的菜單其實也是bootstrap 樣式.表單也是.看下控制器方法.都很簡單.

public ActionResult Create()
        {
            var model = new UserInfoDto();
            return PartialView(model);
        }
        [HttpPost]
        public ActionResult Create(UserInfoDto roleVm)
        {
            var result = _iUsersService.AddUserList(roleVm);
            return Json(result);
        }
        [DisableAbpAntiForgeryTokenValidation]
        [HttpPost]
        [DontWrapResult]
        public ActionResult DelUserById(string Id)
        {
            var result = _iUsersService.DelUsers(Id);
            return Json(result);
        }

Service方法.無需細說,一看就懂.

public class UserService : IUserService
    {
        private readonly IRepository<Users, int> _userRepository;
        public ILogger Logger { get; set; }
        public UserService(IRepository<Users, int> userRepository)
        {
            Logger = NullLogger.Instance;
            _userRepository = userRepository;
        }
        public async Task AddUserList(UserInfoDto model)
        {
            var user = model.MapTo<Users>();
            await _userRepository.InsertAsync(user);
        }

        public async Task DelUsers(string id)
        {
            try
            {
                Users user = _userRepository.Get(Int32.Parse(id));
                await _userRepository.DeleteAsync(user);
            }
            catch (Exception ex)
            {

                throw;
            }
        }
        public async Task<ListResultDto<UserInfoDto>> GetUsers()
        {
            var users = await _userRepository.GetAllListAsync();

            return new ListResultDto<UserInfoDto>(
                users.MapTo<List<UserInfoDto>>()
                );
        }
        public List<UserInfoDto> GetAllList()
        {
            var users = _userRepository.GetAllListAsync();
            return new List<UserInfoDto>(
                users.MapTo<List<UserInfoDto>>()
                );
        }
    }

自此,用戶列表.

返回簡書總目錄:ABP+AdminLTE+Bootstrap Table權限管理系統(tǒng)一期
前往博客園總目錄:ABP+AdminLTE+Bootstrap Table權限管理系統(tǒng)一期

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末誉结,一起剝皮案震驚了整個濱河市鹅士,隨后出現的幾起案子,更是在濱河造成了極大的恐慌惩坑,老刑警劉巖掉盅,帶你破解...
    沈念sama閱讀 218,607評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件也拜,死亡現場離奇詭異,居然都是意外死亡趾痘,警方通過查閱死者的電腦和手機慢哈,發(fā)現死者居然都...
    沈念sama閱讀 93,239評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來永票,“玉大人卵贱,你說我怎么就攤上這事÷录” “怎么了艰赞?”我有些...
    開封第一講書人閱讀 164,960評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長肚吏。 經常有香客問我方妖,道長,這世上最難降的妖魔是什么罚攀? 我笑而不...
    開封第一講書人閱讀 58,750評論 1 294
  • 正文 為了忘掉前任党觅,我火速辦了婚禮,結果婚禮上斋泄,老公的妹妹穿的比我還像新娘杯瞻。我一直安慰自己,他們只是感情好炫掐,可當我...
    茶點故事閱讀 67,764評論 6 392
  • 文/花漫 我一把揭開白布魁莉。 她就那樣靜靜地躺著,像睡著了一般募胃。 火紅的嫁衣襯著肌膚如雪旗唁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,604評論 1 305
  • 那天痹束,我揣著相機與錄音检疫,去河邊找鬼。 笑死祷嘶,一個胖子當著我的面吹牛屎媳,可吹牛的內容都是我干的。 我是一名探鬼主播论巍,決...
    沈念sama閱讀 40,347評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼烛谊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嘉汰?” 一聲冷哼從身側響起丹禀,我...
    開封第一講書人閱讀 39,253評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后湃崩,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,702評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡接箫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,893評論 3 336
  • 正文 我和宋清朗相戀三年攒读,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辛友。...
    茶點故事閱讀 40,015評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡薄扁,死狀恐怖,靈堂內的尸體忽然破棺而出废累,到底是詐尸還是另有隱情邓梅,我是刑警寧澤,帶...
    沈念sama閱讀 35,734評論 5 346
  • 正文 年R本政府宣布邑滨,位于F島的核電站日缨,受9級特大地震影響,放射性物質發(fā)生泄漏掖看。R本人自食惡果不足惜匣距,卻給世界環(huán)境...
    茶點故事閱讀 41,352評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哎壳。 院中可真熱鬧毅待,春花似錦、人聲如沸归榕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刹泄。三九已至外里,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間特石,已是汗流浹背级乐。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留县匠,地道東北人风科。 一個月前我還...
    沈念sama閱讀 48,216評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像乞旦,于是被迫代替她去往敵國和親贼穆。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,969評論 2 355

推薦閱讀更多精彩內容