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);
}
Select2的远程数据操作的更多相关文章
- javascript 入门 之select2获取远程数据
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <meta lan ...
- Linux中Curl命令couldn't connect to host解决方案 php操作Curl(http,https)无法获取远程数据解决方案
本人在做百度账户第三方登录接口,获取百度token,利用php操作curl post方式发送请求token,出现couldn't connect to host错误.经过调试测试,最后终于成功.回头写 ...
- jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据
jQuery.ajax( options ) : 通过 HTTP 请求加载远程数据 这个是jQuery 的底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等. $.ajax() ...
- SQL不同服务器数据库之间的数据操作整理(完整版)
---------------------------------------------------------------------------------- -- Author : htl25 ...
- SQLServer服务器数据库之间的数据操作(完整版)
分类: 数据库开发技术 ---------------------------------------------------------------------------------- -- Au ...
- 转载-SQL不同服务器数据库之间的数据操作整理(完整版) .
---------------------------------------------------------------------------------- -- Author : htl25 ...
- [Sqlite]-->Java采用jdbc联系Sqlite各种特定的工艺数据库的数据操作
引: 1, Sqlite在Windows.Linux 和 Mac OS X 上的安装过程 2.嵌入式数据库的安装.建库.建表.更新表结构以及数据导入导出等等具体过程记录 3,嵌 ...
- 第八章| 2. MySQL数据库|数据操作| 权限管理
1.数据操作 SQL(结构化查询语言),可以操作关系型数据库 通过sql可以创建.修改账号并控制账号权限: 通过sql可以创建.修改数据库.表: 通过sql可以增删改查数据: 可以通过SQL语句中 ...
- 转:不在同一个服务器上的数据库之间的数据操作(oracle/sql server的对比)
如何操做不在同一个数据库中的数据操作: 一.对于SQL server来讲: 1.采用创建链接服务器的方式: (1).创建链接服务器 exec sp_addlinkedserver ...
随机推荐
- 0.JQuery安装
jQuery 安装 网页中添加 jQuery 可以通过多种方法在网页中添加 jQuery. 您可以使用以下方法: 从 jquery.com 下载 jQuery 库 从 CDN 中载入 jQuery, ...
- JDK7 JDK8 的安装 且不同版本之间的切换
myeclipse 论坛下载 https://www.myeclipsecn.com/download/ 用户名:xcj26 邮箱:xcj26@126.com 密码: 26**_X** 版本: Jav ...
- 实验三《敏捷开发与XP实践》_实验报告
实验三<敏捷开发与XP实践>_实验报告 一.实验内容和步骤 提交点1: 任务要求: 实验三 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/479577 ...
- 去掉input type=file的默认样式
原样式: 解决: 加style="opacity: 0;"变成透明的 然后可以外面套个div,在div上自定义样式.
- java 获取本地 mac 地址
主要参考:Java获取本机MAC地址/IP地址/主机名 做的更改: 1.我的windows是中文版,程序中获取mac时是按照physical address 获取的,添加上"物理地址&quo ...
- C++面试出现频率最高的30道题目
http://blog.csdn.net/wangshihui512/article/details/9092439 1.new.delete.malloc.free关系 delete会调用对象的析构 ...
- 如何在gradle项目中添加额外非开源jar包并提交代码
前提:项目开发中,遇到一个地方需要用到公司自定义的jar包,然后要放到代码里又不方便提交到私服 具体实施: 首先在项目中增加一个 libs目录,然后把这种非开源又不在私服上的jar包扔进去, 然后打开 ...
- 阶段3 3.SpringMVC·_06.异常处理及拦截器_3 SpringMVC异常处理之异常处理代码编写
分三步 新建exception的包.然后添加SysException类 一般写异常都继承.Exception 定义Messgae属性,生成get和set 生成带参数的构造方法 选中异常的代码 Ctrl ...
- 初探ASP.NET Web API (转)
http://www.cnblogs.com/mejoy/p/6402821.html 什么是ASP.NET Web API? 官方的解释是 ASP.NET Web API is a framewor ...
- 网络实验 04-利用三层交换机实现VLAN间路由
利用三层交换机实现VLAN间路由 一.实验目标 掌握交换机Tag VLAN 的配置 掌握三层交换机基本配置方法 掌握三层交换机VLAN路由的配置方法 通过三层交换机实现VLAN间相互通信 二.实验背景 ...