ASP.NET MVC中不推荐使用webform的控件了,也就是说当希望列表显示数据时不能使用GridView了,很多开源软件为ASP.NET MVC实现了列表的解决方案,这些具体的解决方案我们放到下节再说,这里介绍些简单的实现方式。

1、简单列表实现

参见:ASP.NET MVC实践系列2-简单应用

2、列表排序实现:

View代码:

Code
  <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:

Code
 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可见得命名空间下有如下代码:

Code
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:

Code
 <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:

Code
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实现(上)相关推荐

  1. ASP.NET MVC实践系列9-filter原理与实践

    filter实际上是一个特性(attribute),它提供了一种向controller 或 action中添加某些任务的方法,当controller 或 action被调用时,会触发filter中定义 ...

  2. ASP.NET MVC实践系列11-FCKEditor和CKEditor的使用

    FCKEditor是一款强大的在线编辑器,简单实用,多浏览器兼容,免费开源,应用十分广泛,据他的官方网站上称有三百多万的下载量,而且无数的知名大公司正在使用它.所以FCKEditor是很值得信赖的,现 ...

  3. ASP.NET MVC实践系列1-UrlRouting

    为了调研ASP.NET MVC是否适合在公司项目中应用,研究了一段时间.感觉网上资料中讲实践的比较少,我在这里总结一下以备以后查用. ASP.NET MVC 包含了一个强大的URL路由引擎,它允许我们 ...

  4. ASP.NET MVC实践系列5-结合jQuery

    现在做web开发肯定都听说过jQuery,jQuery在ASP.NET MVC被支持的很好,而且据说vs2010中也会集成进去,所以使用ASP.NET MVC了解jQuery肯定有莫大的好处,所以这里 ...

  5. mvc ajax helpers,ASP.NET MVC 实践系列4-Ajax应用

    ASP.NET MVC中支持Ajax的方式和webform中有些区别,没有了updatepanel,所以对于初学者来说在最开始应用时似乎没有在webform中简单,但实际使用上更为灵活而跟webfor ...

  6. Scott的ASP.net MVC框架系列文章之四:处理表单数据(2)

    前几周我发表了一系列文章介绍我们正在研究的ASP.NET MVC框架.ASP.NET MVC框架为你提供了一种新的开发Web应用程序的途径,这种途径可以让应用程序变得更加层次清晰,而且更加有利于对代码 ...

  7. ASP.NET MVC Framework 系列

    序言 做为设计模式的王者,MVC在众多领域都成为良好的模型的代名词,从前在ASP.NET下我们只能依靠Monorail来实现ASP.NET下无控件的MVC,但是现在ASP.NET 下的MVC已经成为现 ...

  8. ASP.NET MVC学习系列(一)-WebAPI初探

    由于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章.因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主 ...

  9. ASP.NET MVC 入门系列教程

    一个居于ASP.NET MVC Beta的系列入门文章,有朋友提议说写一个示例程序来同步讲解,那样更加容易学习.所以就写选择了写一个Blog程序来作为示例程序.(原来是居于ASP.NET MVC Pr ...

最新文章

  1. jsp内置对象page
  2. RedHat YUM configure
  3. 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,
  4. 音视频开发(39)---语音增强
  5. 国家信息安全水平考试NISP一级模拟题
  6. 伍德里奇计量经济学导论第6版笔记和课后习题答案
  7. python Django中文文档
  8. simulink教程(自动控制原理)
  9. ffmpeg 分辨率 压缩_说说压制和画质的视频,以及我用的ffmpeg参数
  10. 【※taskmgr.exe进程知识详解※电脑知识】
  11. 邮箱如何发邮件?邮箱怎么发邮件,掌握这几点,轻松搞定
  12. Maximum upload size exceeded
  13. 《英语语法新思维 基础版1》读书笔记(一)
  14. CSFR(跨站请求伪造)攻击与防御
  15. 查询江苏丹阳高考成绩2021,2020年江苏县级市各大高中高考成绩回顾
  16. 现在到底要不要学Python
  17. 乘员舱热舒适度和车辆能量管理云技术研讨会圆满结束!
  18. 基于360SafeDemo对duilib整体框架的概述
  19. 计算机专业留学法国哪个学校,法国留学读计算机专业去哪些学校?
  20. java匿名内部类(实现接口)

热门文章

  1. 完整的连接器设计手册_Harwin连接器展示在深井探油应用中不受环境影响的价值...
  2. python 关闭 定时开启_Qt多种定时器
  3. swift php 类型判断,iOS开发 - Swift实现检测网络连接状态及网络类型
  4. oracle故障一例,工作中遇到的oracle故障分析和处理一例
  5. 入门人工智能,我究竟该学些什么?
  6. 5个IO口实现25个按键的扫描,他做到了!堪称一绝!
  7. python取数组最后一个元素_Python Json。只获取json数组中的最后一个元素
  8. chrom禁用浏览器回退按钮不管用_什么?作为程序员你都工作了还不会用Git
  9. c语言输入的成绩由高到低该怎么,输入成绩,按照平均分从高到低输出
  10. java dotnet core_在.NET Core 2.0中使用Omron库