• 在MVC中进行排序


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

    代码如下:

    publicclass UserInfo { publicint ID { set; get; } publicstring Name { set; get; } publicint 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,第二个是替换。

  • 相关阅读:
    linux学习之路7 linux下获取帮助
    51nod 1002 数塔取数问题
    51nod 1002 数塔取数问题
    51nod 1001 数组中和等于K的数对
    51nod 1001 数组中和等于K的数对
    linux学习之路6 Vi文本编辑器
    linux学习之路6 Vi文本编辑器
    计算误差——ACM计算几何中的精度问题
    计算误差——ACM计算几何中的精度问题
    daily_journal_3 the game of thrones
  • 原文地址:https://www.cnblogs.com/fjzhang/p/2506662.html
Copyright © 2020-2023  润新知