zoukankan      html  css  js  c++  java
  • ASP.NET MVC实践系列6Grid实现(上)

    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


    作者:Lance
    出处:http://www.cnblogs.com/nuaalfm/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    郎咸平 马行空 - 郎咸平说:萧条下的希望(2014年10月25日)
    豆豆 - 遥远的救世主(2014年10月18日)
    高铭 - 天才在左 疯子在右(2014年10月3日)
    张庭斌 艾经纬 - 中国富人为何变穷:金融危机攻略(2014年5月20日)
    王晋康 - 终极爆炸 ▪ 王晋康科幻小说精选集3(2014年4月24日)
    刘慈欣 - 乡村教师 ▪ 刘慈欣科幻自选集(2014年4月2日)
    王晋康 - 替天行道 ▪ 王晋康科幻小说精选集2(2014年3月27日)
    易之 - 我是个算命先生(2014年3月23日)
    宋鸿兵 - 货币战争5(2014年3月20日)
    【英】阿瑟 ▪ 克拉克 - 神的九十九亿个名字(2014年3月16日)
  • 原文地址:https://www.cnblogs.com/nuaalfm/p/1596864.html
Copyright © 2011-2022 走看看