使用Select2插件实现高效的数据加载与筛选

在开发Web应用程序时,经常需要处理大量的数据。传统的解决方案通常有两种:一种是在页面上加载少量数据,然后使用JavaScript进行过滤(用户可以滚动浏览数据);另一种是通过AJAX查询加载大量数据(但用户无法滚动浏览数据)。然而,这两种方法都有其局限性。直到Select2jQuery自动完成插件的出现,才找到了一种既能加载大量数据,又允许用户滚动浏览数据的解决方案。

本文将介绍如何在.NET MVC环境中使用Select2插件。首先,假设读者已经熟悉jQuery和.NET MVC。如果只需要访问别人的JSON服务,那么只需要jQuery经验;但如果需要创建前端和后端,那么熟悉.NET MVC会很有帮助。

本项目使用Visual Studio 2012 Express构建。如果没有这个工具,可以免费下载Visual Studio Express。Select2的设置和代码示例可以在其官方网站上找到。

使用代码

要开始使用,需要下载最新版本的jQuery以及Select2的CSS和JavaScript。这些也可以通过Visual Studio中的NuGet下载。

<link href="~/Content/css/select2.css" type="text/css" rel="stylesheet" /> <script src="~/Scripts/jquery-2.0.3.js"></script> <script src="~/Scripts/select2.js"></script>

要在前端工作,需要:

  • 一个带有id的文本框,用于识别。这是Select2加载json查询结果的页面区域。
  • JSON服务的URL。这是将寻找更多数据的下拉菜单的地方。
  • 配置设置,以确定希望它如何工作(在运行查询之前延迟多长时间,返回多少结果等)。
// 将发送GET请求的URL var attendeeUrl = '@Url.Action("GetAttendees", "Home")'; var pageSize = 20; $('#attendee').select2({ placeholder: 'Enter name', minimumInputLength: 0, allowClear: true, ajax: { quietMillis: 150, url: attendeeUrl, dataType: 'jsonp', data: function (term, page) { return { pageSize: pageSize, pageNum: page, searchTerm: term }; }, results: function (data, page) { var more = (page * pageSize) < data.Total; return { results: data.Results, more: more }; } } }); <input id="attendee" name="AttendeeId" type="text" value="" />

前端启动所需的就是这些。如果需要设置后端,事情会稍微复杂一些,但完全可以处理。

设置JSON服务

需要将数据从后端发送到Select2,以特定的格式。基本上,需要为每个返回的结果发送一个id和text值。还需要返回所有结果的总数量。这样,当开始滚动浏览数据时,Select2就知道是否需要继续请求更多数据,或者已经到达结果的末尾。

public class Select2PagedResult { public int Total { get; set; } public List Results { get; set; } } public class Select2Result { public string id { get; set; } public string text { get; set; } } [HttpGet] public ActionResult GetAttendees(string searchTerm, int pageSize, int pageNum) { AttendeeRepository ar = new AttendeeRepository(); List<Attendee> attendees = ar.GetAttendees(searchTerm, pageSize, pageNum); int attendeeCount = ar.GetAttendeesCount(searchTerm, pageSize, pageNum); Select2PagedResult pagedAttendees = AttendeesToSelect2Format(attendees, attendeeCount); return new JsonpResult { Data = pagedAttendees, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; }

所有从数据存储中获取测试数据、搜索第一个和最后一个名字,并将结果转换为Select2PagedResult类的代码都包含在示例项目中。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485