zoukankan      html  css  js  c++  java
  • Select2的远程数据操作

     一、概述

        如果下拉列表框中的内容太多,最好是使用Select2的远程数据进行筛选。

    二、参考文献

    https://select2.github.io/examples.html#data-ajax

    https://github.com/select2/select2/issues/2950

    三、前端Ajax配置

    $(elemStr).select2(
                {
                    placeholder: 'Enter name',
                    //Does the user have to enter any data before sending the ajax request
                    minimumInputLength: 1,
                    allowClear: true,
                    language: "zh-CN",
                    ajax: {
                        //How long the user has to pause their typing before sending the next request
                        delay: 250,
                        //The url of the json service
                        url: "/Controller/Action",
                        dataType: 'json',
                        //Our search term and what page we are on
                        data: function (params) {
                            if (params.term == "undefined") {
                                searchItem = " ";
                            }
                            else {
                                searchItem = params.term;
                            }
                            var query = {
                                searchTerm: searchItem,
                                pageSize: 20,
                                pageNum: params.page || 1
    
                            };                       
                            return query;
                        },
                        processResults: function (data, params) {
                            //Used to determine whether or not there are more results available,
                            //and if requests for more data should be sent in the infinite scrolling
                            params.page = params.page || 1;                        return {
                                results: data.results,
                                pagination: {
                                    more: (params.page * 20) < data.total
                                }
                            };
                        },
                        cache: true
                    }
                });

    具体的参数说明见参考文献的指南,说几个重点参数:

    1. 自定义向后台传输参数:

    data: function (params) {
                           
                            var query = {
                                searchTerm: searchItem,
                                pageSize: 20,
                                pageNum: params.page || 1
    
                            };                       
                            return query;
                        },

    向后台传输了输入框中的值:searchTerm, 整个下拉列表中可显示的数量:pageSize,当前页码:pageNum

    2. 结果返回后的处理过程:

    return {
             results: data.results,
             pagination: {
             more: (params.page * 20) < data.total
            }       

    data.results与data.total是后台传送回来的json格式,此处需注意results与total必须是小写!(见参考文献2)

     四、后端处理

    1. 符合select2格式的模型

     public class Select2Result
        {
            public string id { get; set; }
            public string text { get; set; }
        }

    2. 返回到select2回调函数的模型

     public class Select2PagedResult
        {
            public int total { get; set; }
            public List<Select2Result> results { get; set; }
        }

    3. Controller/Action

    [HttpGet]
            public async Task<IActionResult> GetDepartmentPersonSelectList(string searchTerm = null, int pageSize = 20, int pageNum = 1)
            {
                
                var departmentPersonListQuery = repo.GetAll();
    
                if (!String.IsNullOrEmpty(searchTerm))
                {
                    departmentPersonListQuery = departmentPersonListQuery.Where(a => a.SpellingFirstCode.Contains(searchTerm));
                }
                var total = await departmentPersonListQuery.CountAsync();
    
                var departmentPersonList = await departmentPersonListQuery.OrderBy(a => a.SpellingFirstCode)
                    .Skip(pageSize * (pageNum - 1))
                    .Take(pageSize).Select(a => new Select2Result { id = a.PersonID.ToString(), text = a.PersonName })
                    .ToListAsync();
                Select2PagedResult result = new Select2PagedResult { total = total, results = departmentPersonList };
    
                return new JsonResult(result);
            }
  • 相关阅读:
    KVM -> 热迁移_05
    KVM -> 虚拟机磁盘管理_03
    使用光盘搭建本地yum源
    KVM -> 虚拟机管理&console登录_02
    使用windows-SQLyog连接linux-mysql
    linux下登陆mysql失败
    忘记root密码时如何重设密码
    批处理程序:自动登陆服务端,并循环执行某些命令
    linux--磁盘分区
    linux--档案与目录管理
  • 原文地址:https://www.cnblogs.com/hahaxi/p/7323719.html
Copyright © 2011-2022 走看看