在ASP.NET MVC中进行排序
在上一篇文章中曾经说了一个排序,当然,那个是客户端的排序,能力有限。
但是在我的项目中却真的就需要一个排序功能,鄙人不才,能力有限,写了一堆丑陋的代码,仅实现了功能,希望路过的神们review下。
好,废话不多说,直接【插入】主题吧。(咦?这个词很好啊。)
首先早Models里创建一个实体,这里没弄数据库,凑合凑合吧,就瞎写了个实体。
代码如下:
{
public int ID { set; get; }
public string Name { set; get; }
public int Age { set; get; }
}
然后创建一个controller,代码如下:
{
return View();
}
然后是创建一个view。
由于是随便写写,所以就不在弄bll了。在controller里创建3个方法。
第一个充当数据源:
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;
}
当然,别忘记引命名空间。
第二个和第三个是排序的重载方法,(丑陋的代码来了)
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的代码:
{
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里的代码吧,其实很简单:
<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.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>>" %>
<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中代码就变成:
<%:Html.Partial("ViewUserControl1",Model) %>
</div>
下面,仅需要改链接就可以了,改成这样:
<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中进行排序相关推荐
- 在 asp.net mvc中的简单分页算法 (续)
在上个月发表的 http://www.cnblogs.com/bwangel/p/mvcpager.html 中,讨论了一下asp.net mvc中结合Entity framework框架进行的分页, ...
- 通过源代码研究ASP.NET MVC中的Controller和View(二)
通过源代码研究ASP.NET MVC中的Controller和View(一) 在开始之前,先来温习下上一篇文章中的结论(推论): IView是所有HTML视图的抽象 ActionResult是Cont ...
- 在Asp.Net MVC中实现RequiredIf标签对Model中的属性进行验证
在Asp.Net MVC中可以用继承ValidationAttribute的方式,自定制实现RequiredIf标签对Model中的属性进行验证 具体场景为:某一属性是否允许为null的验证,要根据另 ...
- ASP.NET MVC中你必须知道的13个扩展点
ScottGu在其最新的博文中推荐了Simone Chiaretta的文章13 ASP.NET MVC extensibility points you have to know,该文章为我 ...
- Asp.net mvc中的Ajax处理
在Asp.net MVC中的使用Ajax, 可以使用通用的Jquery提供的ajax方法,也可以使用MVC中的AjaxHelper. 这篇文章不对具体如何使用做详细说明,只对于在使用Ajax中的一些需 ...
- 在 ASP.NET MVC 中使用 Chart 控件
在 .NET 3.5 的时候,微软就提供了一个 Chart 控件,网络上有大量的关于在 VS2008 中使用这个控件的文章,在 VS2010 中,这个控件已经被集成到 ASP.NET 4.0 中,可以 ...
- 在ASP.NET MVC中使用IIS级别的URL Rewrite
在ASP.NET MVC中使用IIS级别的URL Rewrite 原文 在ASP.NET MVC中使用IIS级别的URL Rewrite 大约一年半前,我在博客上写过一系列关于URL Rewrite的 ...
- ASP.NET MVC中实现多个按钮提交的几种方法
有时候会遇到这种情况:在一个表单上需要多个按钮来完成不同的功能,比如一个简单的审批功能. 如果是用webform那不需要讨论,但asp.net mvc中一个表单只能提交到一个Action处理,相对比较 ...
- 在asp.net mvc中使用PartialView返回部分HTML段
问题链接: MVC怎样实现异步调用输出HTML页面 该问题是个常见的 case, 故写篇文章用于提示新人. 在asp.net mvc中返回View时使用的是ViewResult,它继承自ViewRes ...
最新文章
- 【廖雪峰python入门笔记】tuple_“元素可变”
- 与springcloud整合的框架源码读取入口
- 高精度减法(C++实现)
- 数据结构与算法——二叉平衡树(AVL树)详解
- 如何用代码的方式取出SAP C4C销售订单创建后所有业务伙伴的数据
- GDCM:gdcm::Filename的测试程序
- android web3j 代币查询_使用Web3.js查询以太币和代币余额以及转账
- mongodb 分组聚合_mongodb 聚合命令
- 动手写procedure以及注意的细节
- 教你如何用若依创建子模块详细教程
- Java中list操作
- spark读取kafka数据_解决Spark数据倾斜(Data Skew)的N种姿势
- sas入门学习 via.数说工作室
- 高数下(同济大学版本)期中冲刺式复习
- html大作业【NBA篮球介绍 22个页面】学生网页设计源码
- 盖洛普Q12在团队中的应用
- 《第一行代码——Android》封面诞生记
- obsidian如何修改主题
- 简洁UI设计,超简单的旅游APP,Figma源文件下载
- 智能家居项目(八)之树莓派+摄像头进行人脸识别