使用 jQuery UI 进行自定义排序






4.33/5 (6投票s)
在本文中,我将探讨如何使用 Jquery UI 构建自定义排序。 jQuery UI Sortable 插件通过用鼠标拖动使选定的元素可排序。
引言
在本文中,我将探讨如何使用 Jquery UI 构建自定义排序。 jQuery UI Sortable 插件通过用鼠标拖动使选定的元素可排序。 更多详情请参见 此处。 在我的演示应用程序中,我将创建一个 XML 文件来存储将保存排序顺序的自定义设置。
Using the Code
这是我们的 XML 文件
<?xml version="1.0" encoding="utf-8"?>
<customers>
<customer>
<id>1001</id>
<name>Microsoft</name>
<address>One Microsoft Way</address>
<sortorder>4</sortorder>
</customer>
<customer>
<id>1002</id>
<name>Google</name>
<address>Mountain View, CA</address>
<sortorder>5</sortorder>
</customer>
<customer>
<id>1003</id>
<name>Amazon</name>
<address>Seattle, WA</address>
<sortorder>2</sortorder>
</customer>
<customer>
<id>1004</id>
<name>IBM</name>
<address>Armonk, New York</address>
<sortorder>3</sortorder>
</customer>
<customer>
<id>1005</id>
<name>Yahoo</name>
<address>Sunnyvale, California</address>
<sortorder>1</sortorder>
</customer>
</customers>
我将创建一个简单的 Web 表单应用程序来演示自定义排序。 如果您想使用 ASP.NET MVC,请参阅 JQuery AJAX with ASP.NET MVC。
要创建 Web 应用程序,请按照以下步骤操作
- 启动 Visual Studio 2005 或 2008。
- 点击文件 -> 新建 -> 项目,然后选择 ASP.NET Web 应用程序。
- 它将为我们创建一个基本的 Web 应用程序模板。
这是我们的 default.aspx 页面
<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="CustomSort._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Sortable Demo</title>
<script type="text/javascript"
src="http://www.google.com/jsapi"></script>
<script language="javascript" type="text/javascript">
google.load("jquery", "1.3.2");
google.load("jqueryui", "1.7.2");
</script>
<script type="text/javascript"
src="http://www.json.org/json2.js"></script>
<SCRIPT type=text/javascript>
$(function() {
$("#sortable").sortable();
$("#sortable").disableSelection();
});
function update() {
var list = new Array();
$("ul").each(function(index, id) {
var result = $('#' + id.id).sortable('toArray');
var j = 0;
for (var i = 0; i < result.length; i++) {
list[j++] = $('#' + result[i])[0].value;
}
});
var jsonText = JSON.stringify({ list: list });
$.ajax({
type: "POST",
url: "Default.aspx/SaveData",
data: jsonText,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(res) {
$("#divResult").text(res.d);
}
});
}
</SCRIPT>
<style type="text/css">
ul.horizontal_list li{
text-align:left;
list-style: none;
padding: 3px 10px 3px 10px;
margin: 5px;
border: 1px solid #CCC;
width: 250px;
cursor : move;
}
</style>
</head>
<body>
<div id="divResult" style="color:red;"></div>
<asp:Panel ID="spaceHolder" runat="server" ></asp:Panel>
<input type="button" value="Update" onclick="javascript:update();" />
</body>
</html>
在上面的代码中:
- 我们的页面从 Google 托管的 AJAX 库 API 加载 JQuery 和 JQuery UI,因为它将提高网站性能。 更多详情请参见 此处。
- 我们的页面还从 json.org 加载实用程序类,该类具有一个方法
JSON.stringify(value)
,该方法接受一个 JavaScript 值并生成一个 JSON 文本。 - 我们使用 Jquery sortable UI 插件来读取用户定义的排序顺序。 更多详情请参见 此处。
- 我们的页面使用 HTTP
POST
请求进行 jquery AJAX 调用。 - 它将用户定义的排序数据以 JSON 格式传递给
[WebMethod]
,如下所示。
这是我们的代码隐藏 Default.aspx.cs
namespace CustomSort
{
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
XDocument users = XDocument.Load(Server.MapPath("~/App_Data/Data.xml"));
var query = from user in users.Elements("customers").Elements("customer")
orderby user.Element("sortorder").Value
select user;
StringBuilder sb = new StringBuilder();
int liCounter = 0;
sb.Append("<ul id=\"sortable\" class=\"horizontal_list\"
style=\"list-style-type:none;margin-left:10px;\">");
foreach (XElement usr in query)
{
sb.AppendFormat("<li id=\"itemID{0}\" value=\"{1}\">",
liCounter++, usr.Element("id").Value);
sb.AppendFormat("{0},{1}</li>", usr.Element("name").Value, usr.Element("address").Value);
}
sb.Append("</ul>");
spaceHolder.Controls.Add(new LiteralControl(sb.ToString()));
}
[WebMethod]
public static string SaveData(List<string> list)
{
string retResult = string.Empty;
try
{
XDocument xmldoc = XDocument.Load
(HttpContext.Current.Server.MapPath("~/App_Data/Data.xml"));
int sortOrder = 1;
list.ForEach(delegate(string c)
{
XElement xElement = xmldoc.XPathSelectElement
("customers/customer[id = " + c + "]/sortorder");
xElement.SetValue(sortOrder++);
});
xmldoc.Save(HttpContext.Current.Server.MapPath("~/App_Data/Data.xml"));
retResult = "Data has been saved successfully";
}
catch (Exception ex)
{
retResult = ex.Message;
}
return retResult;
}
}
}
在上面的代码中,我们的 SaveData
方法接收客户 ID 列表,作为用户定义的排序顺序。 然后我们使用 LINQ to XML 在 XML 文件中更新用户定义的排序顺序。
以下是我们最终应用程序的一些屏幕截图
摘要
在本文中,我们探讨了使用 jQuery UI 的自定义排序。 如您所见,jQuery UI 是一个 非常强大 的工具,用于构建 Web 2.0 启用的应用程序。
历史
- 2009 年 9 月 19 日:初始发布