在ASP.NET MVC中进行排序
在上一篇文章中曾經說了一個排序,當然,那個是客戶端的排序,能力有限。
但是在我的項目中卻真的就需要一個排序功能,鄙人不才,能力有限,寫了一堆丑陋的代碼,僅實現了功能,希望路過的神們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中进行排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 字符串转成货币格式, js转货币
- 下一篇: 设计模式学习—Strategy(策略)