ASP.NET MVC实践系列6-Grid实现(上)
ASP.NET MVC中不推荐使用webform的控件了,也就是说当希望列表显示数据时不能使用GridView了,很多开源软件为ASP.NET MVC实现了列表的解决方案,这些具体的解决方案我们放到下节再说,这里介绍些简单的实现方式。
1、简单列表实现
参见:ASP.NET MVC实践系列2-简单应用
2、列表排序实现:
View代码:
<table>
<tr>
<th>
ID
</th>
<th>
<%=Html.ActionLink("作者","SortDemo",new{desc = Convert.ToBoolean(ViewData["desc"]),sortName="Author"}) %>
</th>
<th>
Title
</th>
<th>
CreateTime
</th>
</tr>
<% foreach (var item in Model)
{ %>
<tr>
<td>
<%= Html.Encode(item.ID) %>
</td>
<td>
<%= Html.Encode(item.Author) %>
</td>
<td>
<%= Html.Encode(item.Title) %>
</td>
<td>
<%= Html.Encode(String.Format("{0:g}", item.CreateTime)) %>
</td>
</tr>
<% } %>
</table>
这里可能需要注意的就是<%=Html.ActionLink("作者","SortDemo",new{desc = Convert.ToBoolean(ViewData["desc"]),sortName="Author"}) %>输出到页面的html为:http://localhost:4598/?desc=False&sortName=Author
Controller:
public ActionResult SortDemo(bool? desc,string sortName)
{
List<News> list = ListNews.GetList();
ParameterExpression p = Expression.Parameter(typeof(News), "p");
MemberExpression expM;
System.Reflection.PropertyInfo propertyInfo;
if (string.IsNullOrEmpty(sortName))
{
propertyInfo = typeof(News).GetProperty("ID");
}
else
{
propertyInfo=typeof(News).GetProperty(sortName);
}
expM = Expression.MakeMemberAccess(p, propertyInfo);
Expression exp = Expression.Lambda(expM, p);
if (desc==null || desc==false)
{
ViewData["desc"] = true;
return View(list.AsQueryable<News>().OrderBy(exp, true, propertyInfo.PropertyType));
}
else
{
ViewData["desc"] = false;
return View(list.AsQueryable<News>().OrderBy(exp, false, propertyInfo.PropertyType));
}
}
同时还需要在这个Controller可见得命名空间下有如下代码:
public static class Dynamic
{
public static IQueryable OrderBy(this IQueryable source, Expression ordering, bool desc,Type returnType)
{
Expression queryExpr = source.Expression;
queryExpr = Expression.Call(typeof(Queryable), desc ? "OrderBy" : "OrderByDescending",
new Type[] { source.ElementType, returnType },
queryExpr, Expression.Quote(ordering));
return source.Provider.CreateQuery(queryExpr);
}
}
上面的代码是用于动态拼接OrderBy的表达式的,当然我们也可以使用微软提供的Dynamic类,这个Dynamic类可以在\Microsoft Visual Studio 9.0\Samples\2052\CSharpSamples.zip的文件中的LinqSamples/DynamicQuery文件夹中找到。
3、列表翻页:
View:
<table>
<tr>
<th>
ID
</th>
<th>
Author
</th>
<th>
Title
</th>
<th>
CreateTime
</th>
</tr>
<% foreach (var item in Model)
{ %>
<tr>
<td>
<%= Html.Encode(item.ID) %>
</td>
<td>
<%= Html.Encode(item.Author) %>
</td>
<td>
<%= Html.Encode(item.Title) %>
</td>
<td>
<%= Html.Encode(String.Format("{0:g}", item.CreateTime)) %>
</td>
</tr>
<% } %>
<tr>
<td colspan="4" align="right">
<%
var currentPage = (int)ViewData["currentPage"];
var pages = (int)ViewData["pages"];
for (int i = 0; i < pages; i++)
{
if (currentPage == i)
{
%>
<%=i+1%>
<%
}
else
{
%>
<%=Html.ActionLink((i + 1).ToString(), "NewsPageList", new { page = i })%>
<%
}
%>
<% }
%>
</td>
</tr>
</table>
Controller:
public ActionResult NewsPageList(int? page)
{
List<News> list = ListNews.GetList();
const int pageSize = 5;
ViewData["currentPage"] = page??0;
ViewData["pages"] = Convert.ToInt32(Math.Ceiling((double)list.Count() / pageSize));
var news = list.Skip((page ?? 0) * pageSize).Take(pageSize);
return View(news);
}
4、源码下载
5、参考:
微软的Dynamic
转载于:https://www.cnblogs.com/nuaalfm/archive/2009/11/10/1596864.html
ASP.NET MVC实践系列6-Grid实现(上)相关推荐
- ASP.NET MVC实践系列9-filter原理与实践
filter实际上是一个特性(attribute),它提供了一种向controller 或 action中添加某些任务的方法,当controller 或 action被调用时,会触发filter中定义 ...
- ASP.NET MVC实践系列11-FCKEditor和CKEditor的使用
FCKEditor是一款强大的在线编辑器,简单实用,多浏览器兼容,免费开源,应用十分广泛,据他的官方网站上称有三百多万的下载量,而且无数的知名大公司正在使用它.所以FCKEditor是很值得信赖的,现 ...
- ASP.NET MVC实践系列1-UrlRouting
为了调研ASP.NET MVC是否适合在公司项目中应用,研究了一段时间.感觉网上资料中讲实践的比较少,我在这里总结一下以备以后查用. ASP.NET MVC 包含了一个强大的URL路由引擎,它允许我们 ...
- ASP.NET MVC实践系列5-结合jQuery
现在做web开发肯定都听说过jQuery,jQuery在ASP.NET MVC被支持的很好,而且据说vs2010中也会集成进去,所以使用ASP.NET MVC了解jQuery肯定有莫大的好处,所以这里 ...
- mvc ajax helpers,ASP.NET MVC 实践系列4-Ajax应用
ASP.NET MVC中支持Ajax的方式和webform中有些区别,没有了updatepanel,所以对于初学者来说在最开始应用时似乎没有在webform中简单,但实际使用上更为灵活而跟webfor ...
- Scott的ASP.net MVC框架系列文章之四:处理表单数据(2)
前几周我发表了一系列文章介绍我们正在研究的ASP.NET MVC框架.ASP.NET MVC框架为你提供了一种新的开发Web应用程序的途径,这种途径可以让应用程序变得更加层次清晰,而且更加有利于对代码 ...
- ASP.NET MVC Framework 系列
序言 做为设计模式的王者,MVC在众多领域都成为良好的模型的代名词,从前在ASP.NET下我们只能依靠Monorail来实现ASP.NET下无控件的MVC,但是现在ASP.NET 下的MVC已经成为现 ...
- ASP.NET MVC学习系列(一)-WebAPI初探
由于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章.因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主 ...
- ASP.NET MVC 入门系列教程
一个居于ASP.NET MVC Beta的系列入门文章,有朋友提议说写一个示例程序来同步讲解,那样更加容易学习.所以就写选择了写一个Blog程序来作为示例程序.(原来是居于ASP.NET MVC Pr ...
最新文章
- jsp内置对象page
- RedHat YUM configure
- 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,
- 音视频开发(39)---语音增强
- 国家信息安全水平考试NISP一级模拟题
- 伍德里奇计量经济学导论第6版笔记和课后习题答案
- python Django中文文档
- simulink教程(自动控制原理)
- ffmpeg 分辨率 压缩_说说压制和画质的视频,以及我用的ffmpeg参数
- 【※taskmgr.exe进程知识详解※电脑知识】
- 邮箱如何发邮件?邮箱怎么发邮件,掌握这几点,轻松搞定
- Maximum upload size exceeded
- 《英语语法新思维 基础版1》读书笔记(一)
- CSFR(跨站请求伪造)攻击与防御
- 查询江苏丹阳高考成绩2021,2020年江苏县级市各大高中高考成绩回顾
- 现在到底要不要学Python
- 乘员舱热舒适度和车辆能量管理云技术研讨会圆满结束!
- 基于360SafeDemo对duilib整体框架的概述
- 计算机专业留学法国哪个学校,法国留学读计算机专业去哪些学校?
- java匿名内部类(实现接口)
热门文章
- 完整的连接器设计手册_Harwin连接器展示在深井探油应用中不受环境影响的价值...
- python 关闭 定时开启_Qt多种定时器
- swift php 类型判断,iOS开发 - Swift实现检测网络连接状态及网络类型
- oracle故障一例,工作中遇到的oracle故障分析和处理一例
- 入门人工智能,我究竟该学些什么?
- 5个IO口实现25个按键的扫描,他做到了!堪称一绝!
- python取数组最后一个元素_Python Json。只获取json数组中的最后一个元素
- chrom禁用浏览器回退按钮不管用_什么?作为程序员你都工作了还不会用Git
- c语言输入的成绩由高到低该怎么,输入成绩,按照平均分从高到低输出
- java dotnet core_在.NET Core 2.0中使用Omron库