zoukankan      html  css  js  c++  java
  • asp.net mvc多条件+分页查询解决方案

    http://www.cnblogs.com/nickppa/p/3232535.html

    asp.net mvc多条件+分页查询解决方案

    开发环境vs2010

    css:bootstrap

    js:jquery

        bootstrap paginator

    原先只是想做个mvc的分页,但是一般的数据展现都需要检索条件,而且是多个条件,所以就变成了MVC多条件+分页查询

    因为美工不是很好,所以用的是bootstrap前端框架,自己懒得写前端的分页控件,用的是bootstrap paginator分页控件。

    方式:

         用Get方式提交检索条件,分页可用2种模式,无刷新或者带刷新的跳转。



    Shared\_Layout.cshtml中添加css、js脚本引用:

     _Layout.cshtml

    查询页面(View)Index.cshtml:
    引用分页插件库、生成分页脚本,定义分页跟数据展现的分部视图:

    @Url.IncludePagerScript()
    @Html.Pager("#pager", "#Content", "/Search/?page=", Model)
    <div class="container">
        <div id="pager"></div>
        <div id="Content">
        @Html.Partial("IndexTable")
        </div>
    </div>

    封装了下分页脚本:

    @Html.Pager(分页控件, 数据展现, 分页的查询地址, 继承PagerSearchBase的Model,是否刷新默认为刷新的)

    若要切换成分页的无刷新模式,只需要写成@Html.Pager("#pager", "#Content", "/Search/?page=", Model, false)

     Html.Pager的源代码

    定义查询表单:

    复制代码
    @using(Html.BeginForm("Index", "Search", FormMethod.Get, new { @class = "form-search form-inline" }))
    {
        <div class="input-append">
        @Html.TextBoxFor(model => model.UserName, new { @class = "span2 search-query" })
        <button type="submit" class="btn">
            快速查询</button>
        </div>
    }
    复制代码

    整个Index.cshtml与分部视图IndexTable.cshtml的源代码:

     Index.cshtml
     IndexTable.cshtml


    控制器(Control)SearchController.cs:

    Index:

    复制代码
     1 public ActionResult Index(int page = 1)
     2         {
     3             SearchModel conditionData = SearchModel.Create(Request, GetMembers());
     4             conditionData.Search(page);
     5 
     6             if(Request.IsAjaxRequest()) return PartialView("IndexTable", conditionData);
     7             return View("Index", conditionData);
     8         }
    复制代码

    取得数据(测试数据):

     测试数据


    模型(Model)SearchModel.cs、Member.cs:
    SearchModel继承自PagerSearchBase

    1 public class SearchModel : PagerSearchBase
    2     {
    3         public string UserName { get; set; }
    4 
    5         public IEnumerable<Member> Members { get; set; }
    6     }

    创建SearchModel对象的方法:

    复制代码
    1 public static SearchModel Create(HttpRequestBase request, IEnumerable<Member> members)
    2         {
    3             SearchModel result = new SearchModel();
    4             result.AddFields(request, "UserName");
    5 result.Members = members; 6 return result; 7 }
    复制代码

    protected void AddFields(HttpRequestBase request, params string[] fieldNames);

    用于添加查询条件的属性名,并为属性设置值,这里的属性只能是string类型的

    重载子类的SearchByPage函数

    复制代码
    1 protected override void SearchByPage(int page)
    2         {
    3             // 过滤
    4             Members = Members.Where(UserName, entity => entity.UserName.Contains(UserName));
    5             // 分页
    6             Members = Pager(Members.OrderBy(entity => entity.UserName));
    7         }
    复制代码

    扩展了下IEnumerable<TSource>的Where函数,若遇到UserName为空,则不进行条件过滤,且能链式调用

     扩展Where函数

    PagerSearchBase.cs基类

     PagerSearchBase.cs

    Member.cs

    1 public class Member
    2     {
    3         public string UserName { get; set; }
    4         public int Age { get; set; }
    5         public string Sex { get; set; }
    6     }


    这样就完成了多条件查询+分页的页面。

    如果要增加条件,就只要修改Model跟View就可以了

    如要增加个Age的条件:

    修改Model:

        增加属性字段:public string Age { get; set; }

        原result.AddFields(request, "UserName");改为result.AddFields(request, "UserName", "Age");

        SearchByPage中增加过滤条件:

    复制代码
     1 protected override void SearchByPage(int page)
     2         {
     3             int age = 0;
     4             if(!Int32.TryParse(Age, out age)) Age = string.Empty;
     5             // 过滤
     6             Members = Members.Where(UserName, entity => entity.UserName.Contains(UserName))
     7                 .Where(Age, entity => entity.Age == age);
     8             // 分页
     9             Members = Pager(Members.OrderBy(entity => entity.UserName));
    10         }
    复制代码

    完整的SearchModel.cs文件:

     SearchModel.cs

    修改View:

    在Index.cshtml查询的表单中增加查询条件:

        @Html.TextBoxFor(model => model.Age, new { @class = "span2 search-query" })

    完整的Index.cshtml文件:

     Index.cshtml

    就可以了,应该是挺方便了

    完整项目文件下载:

    http://files.cnblogs.com/nickppa/MvcPagerSearch.rar

  • 相关阅读:
    【Redfin SDE intern】跪经
    刷题upupup【Java中Queue、Stack、Heap用法总结】
    刷题upupup【Java中HashMap、HashSet用法总结】
    【lintcode】二分法总结 II
    【lintcode】 二分法总结 I
    201671010117 2016-2017-2 《Java程序设计》面向对象程序设计课程学习进度条
    201671010117 2016-2017-2《Java程序设计》第十八周学习心得
    201671010117 2016-2017-2 《Java程序设计》Java第十七周学习心得
    201671010117 2016-2017-2 《JAVA程序设计》java第十六周学习心得
    201671010117 2016-2017-2 《JAVA程序设计》java第十五周学习心得
  • 原文地址:https://www.cnblogs.com/zkwarrior/p/5155729.html
Copyright © 2011-2022 走看看