ASP.NET MVC中对数据进行排序的方法

  本系列是讲解如何在ASP.NET mvc中对数据进行展示、排序、分页等的系列文章。在上周的文章中,一步一步教会了大家如何使用ASP.NET MVC框架去的展示数据。在上周的文章中,我们先用Visual Studio创建了一个新的ASP.NET MVC应用程序,接着连接到了Northwind数据库,并展示了如何使用微软的LINQ-SQL的工具去访问数据库中的数据,接着指导如何去实现视图层去展示产品信息及如何设计控制器。

  本文是在上一篇文章的例子基础上,展示了如何去实现数据的双向排序。如果你是已经熟悉ASP.NET WebForm开发的开发者,你应该知道,在GridView控件中可以很简单的通过点击就能实现排序。但可惜的是,在ASP.NET MVC中实现排序的功能并不是那么简单,但工作量也没有显着增多。在ASP.NET MVC中,我们能更多地控制网格和排序的界面布局和标记,以及通过何种机制来实现排序。以往使用GridView控件时,排序是通过将参数以POSTBACK的形式回传到后台,以决定用什么样的列进行排序以及是以升序或降序-排列,回传的参数作为隐藏表单域提交。在本文中,我们将使用查询字符串参数来指定排序参数,这意味着排序的顺序可以被搜索引擎搜索到,能通过电子邮件发送给同事,还能做很多GridView内置排序功能不能实现的事情。

  与上一篇文章一样,本文提供了分步的指导说明,包括一个完整的可以工作的代码例子,在文章末尾可以下载。

  步骤0:一个简要指南

  本文将介绍如何实现双向的排序,并假定读者已经阅读掌握了上一篇文章介绍的内容。

  在上一篇文章中,我们可以通过ASP.NET MVC中的URL转发功能,以下面的地址形式访问产品的首页:

  www.yoursite.com/Products/Index(可以简写成www.yoursite.com/Products)。本文中,我们将用下面的URL去访问要排序的内容:

  www.yoursite.com/Products/Sortable?sortBy=ColumnNameascending=true|false

  具体的一些例子如下:

  /Products/Sortable- 这表示按默认顺序排列产品。当没指定排序的列时,默认按产品名称的字母顺序(如升序)排列。换句话说,如果SortBy参数没有提供,按产品名称排序,如果不提供ascending参数,按递增顺序排列。

  /Products/Sortable?sortBy=UnitPrice 按单价的升序排序产品。

  /Products/Sortable?sortBy=UnitPriceascending=false – 按UnitPrice列降序排序(即从最昂贵的到价格最便宜的)。

  跟使用GridView控件一样,在点击网格中标题行中的列名时可以进行。但不同于GridView的是,我们每次点列的这些标题,是以超链接的形式实现的,并且带有参数,比

  如表格中有价格这个列,当第一次点击列名时,将以

  www.yoursite.com/Products/Sortable?sortBy=UnitPriceascending=true的形式发送链接到后端,请注意的是,在网格中显示的列名,不一定跟在URL中sortBy查询字符串参数中传递的名称是一样的。sortBy 参数提供的是在数据库中的列名,两者并不要求一定相同。

  步骤1:创建指定的视图模型

  在上一篇文章的演示中,我们使用了产品的集合作为其实体模型(以NorthwindDataContext去命名)。这对简单的网格来说是可以的,但对于要排序的数据表格,需要知道一点的不仅仅是产品的集合,还要视图层方面知道哪些列的数据需要进行排序,是按升序或降序排序,如果用户要点的列已经按某一个顺序已排序的话,则此时会按原来的顺序排序(假设某列已经是按升序排列,用户点标题一次,则倒过来按降序排列,再点一次,又按升序,如此类推)。

  为此,我们添加一个新类,这些类被称为特定视图服务的模型,打开上一篇文章中已经实现的应用程序,在Models文件夹下添加一个名为ProductGridModel.cs 的文件,代码如下:

namespace Web.Models
{
public class ProductGridModel
{
// Data properties
public IEnumerable Product Products { get; set; }



// Sorting-related properties
public string SortBy { get; set; }
public bool SortAscending { get; set; }
public string SortExpression
{
get
{
return this.SortAscending ? this.SortBy + " asc" : this.SortBy + " desc";
}
}
}
}

NET技术ASP.NET MVC中对数据进行排序的方法,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。