博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在MVC中进行排序
阅读量:6961 次
发布时间:2019-06-27

本文共 4856 字,大约阅读时间需要 16 分钟。

 

首先早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/fjzhang/archive/2012/05/17/2506662.html

你可能感兴趣的文章
Android中Preference的使用以及监听事件分析
查看>>
Heroku error:Permission denied (publickey)
查看>>
解决linux的-bash: ./xx: Permission denied
查看>>
Laravel 第三方登陆之 Socialite Providers
查看>>
Ubuntu14.10 remove ibus 之后
查看>>
Spring第一天
查看>>
功能需求流程、流程图制作软件
查看>>
linux 下C语言线程示例 + 线程同步
查看>>
在Fedora、opensuse下删除默认安装的openjdk,并安装oracle jdk的方法
查看>>
springMVC笔记系列(20)——控制器实现详解(下)
查看>>
【软件周刊】Google Chrome 55 发布,默认禁用 Flash;PHP 7.1.0 发布,提供新的语法...
查看>>
guava-布隆过滤器
查看>>
【笔记】浏览器同源策略二三事
查看>>
人脸识别系统原理
查看>>
Linux文件上传下载,rz和sz
查看>>
在as3中使用嵌入字体
查看>>
Flink VS Spark
查看>>
cxf集成到spring中发布restful webservice
查看>>
linux系统调用出错时的处理函数
查看>>
How processor, assembler, and programming langu...
查看>>