在上一篇文章中曾经说了一个排序,当然,那个是客户端的排序,能力有限。

但是在我的项目中却真的就需要一个排序功能,鄙人不才,能力有限,写了一堆丑陋的代码,仅实现了功能,希望路过的神们review下。

好,废话不多说,直接【插入】主题吧。(咦?这个词很好啊。)

首先早Models里创建一个实体,这里没弄数据库,凑合凑合吧,就瞎写了个实体。

代码如下:

public class UserInfo
{
public int ID { set; get; }
public string Name { set; get; }
public int Age { set; get; }
}

然后创建一个controller,代码如下:

public ActionResult Index()
{

return View();
}

然后是创建一个view。

由于是随便写写,所以就不在弄bll了。在controller里创建3个方法。

第一个充当数据源:

[NonAction]
private List<UserInfo> AllUsers()
{
List<UserInfo> list = new List<UserInfo>();
list.Add(new UserInfo() {ID=1,Name="张三",Age=18 });
list.Add(new UserInfo() { ID = 2, Name = "李四", Age = 18 });
list.Add(new UserInfo() { ID = 3, Name = "王五", Age = 17 });
list.Add(new UserInfo() { ID = 4, Name = "赵六", Age = 19 });
list.Add(new UserInfo() { ID = 5, Name = "田七", Age = 22 });
list.Add(new UserInfo() { ID = 6, Name = "周八", Age = 10 });
list.Add(new UserInfo() { ID = 7, Name = "吴九", Age = 33 });
list.Add(new UserInfo() { ID = 8, Name = "郑十", Age = 26 });
return list;
}

当然,别忘记引命名空间。

第二个和第三个是排序的重载方法,(丑陋的代码来了)

[NonAction]
private List<UserInfo> GetUsers()
{
return AllUsers();
}
[NonAction]
private List<UserInfo> GetUsers(string sort, bool? desc)
{
List<UserInfo> list = AllUsers();
if (desc==true)
{
switch (sort)
{
case "ID":
list = list.OrderByDescending(m => m.ID).ToList();
break;
case "Name":
list = list.OrderByDescending(m => m.Name).ToList();
break;
case "Age":
list = list.OrderByDescending(m => m.Age).ToList();
break;
}

}
else
{
switch (sort)
{
case "ID":
list = list.OrderBy(m => m.ID).ToList();
break;
case "Name":
list = list.OrderBy(m => m.Name).ToList();
break;
case "Age":
list = list.OrderBy(m => m.Age).ToList();
break;
}

}
return list;
}

由于desc是bool?,所以我只会这样判断。

然后是action的代码:

public ActionResult Index(string sort,bool? desc)
{
List<UserInfo> list ;
if (String.IsNullOrEmpty(sort) && desc != null)
{
list = GetUsers();
}
else
{
list = GetUsers(sort, desc);
}

ViewBag.sort = sort;
ViewBag.desc = !desc;
return View(list);
}

这两个viewbag其实就是以前的viewdata,在这里需要传递到view中,充当开关。

那么我们就来看view里的代码吧,其实很简单:

<table>
<tr>
<th>
<%:Html.ActionLink("ID","Index",new{sort="ID",desc = ViewBag.sort=="ID"?ViewBag.desc:true}) %>
</th>
<th>
<%:Html.ActionLink("姓名","Index",new{sort="Name",desc=ViewBag.sort=="Name"?ViewBag.desc:true}) %>
</th>
<th>
<%:Html.ActionLink("年龄","Index",new{sort="Age",desc=ViewBag.sort=="Age"?ViewBag.desc:true}) %>
</th>
</tr>
<%foreach (MvcApplication1.Models.UserInfo info in Model)
{%>
<tr>
<td>
<%:info.ID %>
</td>
<td>
<%:info.Name %>
</td>
<td>
<%:info.Age %>
</td>
</tr>
<%} %>
</table>

当然,记得把view做成强类型。

这样,在点击列头的时候就实现了排序。

当然,可能有人喜欢无刷排序,或许有人会说,应该很麻烦吧。其实在ASP.NET MVC 3中,很多东西都是现成的,必须把刚才的功能做成ajax的。

首先加入js文件:

<script src="http://www.cnblogs.com/Scripts/jquery-1.4.4-vsdoc.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Scripts/jquery-1.4.4.min.js" type="text/javascript"></script>
<script src="http://www.cnblogs.com/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>

然后呢,把table做成局部view,也就是PartialView:

在PartialView中的table中,加上id,记得这个view也要强类型,就是

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<List<MvcApplication1.Models.UserInfo>>" %>

<table id="datalist">
<tr>
<th>
<%:Html.ActionLink("ID","Index",new{sort="ID",desc = ViewBag.sort=="ID"?ViewBag.desc:true}) %>
</th>
<th>
<%:Html.ActionLink("姓名","Index",new{sort="Name",desc=ViewBag.sort=="Name"?ViewBag.desc:true}) %>
</th>
<th>
<%:Html.ActionLink("年龄","Index",new{sort="Age",desc=ViewBag.sort=="Age"?ViewBag.desc:true}) %>
</th>
</tr>
<%foreach (MvcApplication1.Models.UserInfo info in Model)
{%>
<tr>
<td>
<%:info.ID %>
</td>
<td>
<%:info.Name %>
</td>
<td>
<%:info.Age %>
</td>
</tr>
<%} %>
</table>

那么,default1这个view中代码就变成:

<div>
<%:Html.Partial("ViewUserControl1",Model) %>
</div>

下面,仅需要改链接就可以了,改成这样:

<tr>
<th>
<%:Ajax.ActionLink("ID", "Index", new { sort = "ID", desc = ViewBag.sort == "ID" ? ViewBag.desc : true }, new AjaxOptions { UpdateTargetId = "datalist", InsertionMode = InsertionMode.Replace })%>
</th>
<th>
<%:Ajax.ActionLink("姓名", "Index", new { sort = "Name", desc = ViewBag.sort == "Name" ? ViewBag.desc : true }, new AjaxOptions { UpdateTargetId = "datalist", InsertionMode = InsertionMode.Replace })%>
</th>
<th>
<%:Ajax.ActionLink("年龄", "Index", new { sort = "Age", desc = ViewBag.sort == "Age" ? ViewBag.desc : true }, new AjaxOptions { UpdateTargetId = "datalist", InsertionMode = InsertionMode.Replace })%>
</th>
</tr>

其中,updatetargetid是更新的内容id,这里就是这个table,第二个是替换。

这时我们运行再来看的话,就会发现现在的排序变成异步的了。怎么样,很简单吧。

转载于:https://www.cnblogs.com/fengyishou/archive/2011/04/25/2028513.html

在ASP.NET MVC中进行排序相关推荐

  1. 在 asp.net mvc中的简单分页算法 (续)

    在上个月发表的 http://www.cnblogs.com/bwangel/p/mvcpager.html 中,讨论了一下asp.net mvc中结合Entity framework框架进行的分页, ...

  2. 通过源代码研究ASP.NET MVC中的Controller和View(二)

    通过源代码研究ASP.NET MVC中的Controller和View(一) 在开始之前,先来温习下上一篇文章中的结论(推论): IView是所有HTML视图的抽象 ActionResult是Cont ...

  3. 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证

    在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...

  4. ASP.NET MVC中你必须知道的13个扩展点

         ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...

  5. Asp.net mvc中的Ajax处理

    在Asp.net MVC中的使用Ajax, 可以使用通用的Jquery提供的ajax方法,也可以使用MVC中的AjaxHelper. 这篇文章不对具体如何使用做详细说明,只对于在使用Ajax中的一些需 ...

  6. 在 ASP.NET MVC 中使用 Chart 控件

    在 .NET 3.5 的时候,微软就提供了一个 Chart 控件,网络上有大量的关于在 VS2008 中使用这个控件的文章,在 VS2010 中,这个控件已经被集成到 ASP.NET 4.0 中,可以 ...

  7. 在ASP.NET MVC中使用IIS级别的URL Rewrite

    在ASP.NET MVC中使用IIS级别的URL Rewrite 原文 在ASP.NET MVC中使用IIS级别的URL Rewrite 大约一年半前,我在博客上写过一系列关于URL Rewrite的 ...

  8. ASP.NET MVC中实现多个按钮提交的几种方法

    有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...

  9. 在asp.net mvc中使用PartialView返回部分HTML段

    问题链接: MVC怎样实现异步调用输出HTML页面 该问题是个常见的 case, 故写篇文章用于提示新人. 在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewRes ...

最新文章

  1. 【廖雪峰python入门笔记】tuple_“元素可变”
  2. 与springcloud整合的框架源码读取入口
  3. 高精度减法(C++实现)
  4. 数据结构与算法——二叉平衡树(AVL树)详解
  5. 如何用代码的方式取出SAP C4C销售订单创建后所有业务伙伴的数据
  6. GDCM:gdcm::Filename的测试程序
  7. android web3j 代币查询_使用Web3.js查询以太币和代币余额以及转账
  8. mongodb 分组聚合_mongodb 聚合命令
  9. 动手写procedure以及注意的细节
  10. 教你如何用若依创建子模块详细教程
  11. Java中list操作
  12. spark读取kafka数据_解决Spark数据倾斜(Data Skew)的N种姿势
  13. sas入门学习 via.数说工作室
  14. 高数下(同济大学版本)期中冲刺式复习
  15. html大作业【NBA篮球介绍 22个页面】学生网页设计源码
  16. 盖洛普Q12在团队中的应用
  17. 《第一行代码——Android》封面诞生记
  18. obsidian如何修改主题
  19. 简洁UI设计,超简单的旅游APP,Figma源文件下载
  20. 智能家居项目(八)之树莓派+摄像头进行人脸识别

热门文章

  1. 基于稀疏表示的人脸识别 (SRC,LASRC,RASL,MRR)
  2. MarkdownPad2基础语法
  3. AI领域内,敢和BAT决斗的创业公司都在这了!
  4. 我国智能家居行业运行现状分析 标准割裂市场
  5. Gallery简单应用
  6. 系统设计 - 使用面向 iOS 的本机插件扩展
  7. 看似简单的问题 静态方法和实例化方法的区别
  8. SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
  9. /lib/lsb/init-functions
  10. 全面降低windows系统的安全隐患 (五)