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

   2023-02-09 学习力0
核心提示:http://www.cnblogs.com/nickppa/p/3232535.html开发环境vs2010css:bootstrapjs:jquery    bootstrap paginator原先只是想做个mvc的分页,但是一般的数据展现都需要检索条件,而且是多个条件,所以就变成了MVC多条件+分页查询因为美工不是很好,所以用的是

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

开发环境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 ></div>
    <div >
    @Html.Partial("IndexTable")
    </div>
</div>

封装了下分页脚本:

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

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

 Html.Pager的源代码

 

定义查询表单:

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


            
asp.net mvc多条件+分页查询解决方案
@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>
}
asp.net mvc多条件+分页查询解决方案
    


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

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

 Index.cshtml
 IndexTable.cshtml


 

控制器(Control)SearchController.cs:

Index:

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


            
asp.net mvc多条件+分页查询解决方案
 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         }
asp.net mvc多条件+分页查询解决方案
    


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

取得数据(测试数据):

 测试数据


模型(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对象的方法:

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


            
asp.net mvc多条件+分页查询解决方案
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 }
asp.net mvc多条件+分页查询解决方案
    


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

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

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

重载子类的SearchByPage函数

 

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


            
asp.net mvc多条件+分页查询解决方案
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         }
asp.net mvc多条件+分页查询解决方案
    


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

 

扩展了下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中增加过滤条件:

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


            
asp.net mvc多条件+分页查询解决方案
 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         }
asp.net mvc多条件+分页查询解决方案
    


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

 

完整的SearchModel.cs文件:

 SearchModel.cs

修改View:

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

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

完整的Index.cshtml文件:

 

 Index.cshtml

 

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

完整项目文件下载:

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

开发环境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 ></div>
    <div >
    @Html.Partial("IndexTable")
    </div>
</div>

封装了下分页脚本:

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

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

 Html.Pager的源代码

 

定义查询表单:

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


            
asp.net mvc多条件+分页查询解决方案
@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>
}
asp.net mvc多条件+分页查询解决方案
    


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

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

 Index.cshtml
 IndexTable.cshtml


 

控制器(Control)SearchController.cs:

Index:

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


            
asp.net mvc多条件+分页查询解决方案
 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         }
asp.net mvc多条件+分页查询解决方案
    


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

取得数据(测试数据):

 测试数据


模型(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对象的方法:

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


            
asp.net mvc多条件+分页查询解决方案
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 }
asp.net mvc多条件+分页查询解决方案
    


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

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

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

重载子类的SearchByPage函数

 

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


            
asp.net mvc多条件+分页查询解决方案
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         }
asp.net mvc多条件+分页查询解决方案
    


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

 

扩展了下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中增加过滤条件:

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


            
asp.net mvc多条件+分页查询解决方案
 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         }
asp.net mvc多条件+分页查询解决方案
    


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

 

完整的SearchModel.cs文件:

 SearchModel.cs

修改View:

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

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

完整的Index.cshtml文件:

 

 Index.cshtml

 

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

完整项目文件下载:

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

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 使用WebClient自动填写并提交ASP.NET页面表单的源代码
    使用WebClient自动填写并提交ASP.NET页面表单的
    转自:http://www.cnblogs.com/anjou/archive/2007/03/07/667253.html 在.NET中通过程序填写和提交表单还是比较简单。比如,要提交一个如下图所示的登录表单:           填写和提交以上表单的代码如下:       // 要提交表单的URI字符串
    02-09
  • ASP.NET操作Cookies的问题(Bug or Not)
    以下存和取都是在不同的页面中,如果是在同一个页面也没必要用cookies了。 Test1: 给Cookies赋值: const string AAA="aaa"; Response.Cookies[AAA].Value = "111;222;333"; 取值: string value = Request.Cookies[AAA].Value; // value为111 Test2: 给Cooki
    02-09
  • Asp.Net Core 自定义验证属性
      很多时候,在模型上的验证需要自己定义一些特定于我们需求的验证属性。所以这一篇我们就来介绍一下怎么自定义验证属性。  我们来实现一个验证邮箱域名的自定义验证属性,当然,最重要的是需要定义一个继承自ValidationAttribute的类,然后在实现其IsVal
    02-09
  • Asp.Net 之 枚举类型的下拉列表绑定
    有这样一个学科枚举类型:/// 学科 /// /summary public enum Subject {None = 0,[Description("语文")]Chinese = 1,[Description("数学")]Mathematics = 2,[Description("英语")]English = 3,[Description("政治")]Politics = 4,[Description("物理&qu
    02-09
  • [ASP.NET笔记] 1.Web基础知识
         1:http协议:     2:web服务器:     3:静态网页的概念     4:动态网页的概念       http协议:http(hypertext transfer protocol) 即超文本传输协议,这个协议是在internet上进行信息传送的协议任何网页之间要相互沟通,必须要尊循
    02-09
  • ASP.NET邮件发送 .net 发送邮件
      今天做了个ASP.NET做发送邮件功能,发现QQ邮箱好奇怪,当你用QQ邮箱做服务器的时候什么邮件都发送不出去(QQ邮箱除外)。而且爆出这样的错误:"邮箱不可用。 服务器响应为: Error: content rejected.http://mail.qq.com/zh_CN/help/content/rejectedmail.ht
    02-09
  • 由ASP.NET Core根据路径下载文件异常引发的探究
    前言    最近在开发新的项目,使用的是ASP.NET Core6.0版本的框架。由于项目中存在文件下载功能,没有使用类似MinIO或OSS之类的分布式文件系统,而是下载本地文件,也就是根据本地文件路径进行下载。这其中遇到了一个问题,是关于如何提供文件路径的,通
    02-09
  • ASP.NET的运行原理与运行机制 ASP.NET的开发模式包括
    ASP.NET的运行原理与运行机制 ASP.NET的开发模
    在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用WebForms这种模仿Windows Form编程方式有了很大不同,不再有大量控件和控件生成的大量不够灵活的代码
    02-09
  • ASP.NET 后台接收前台POST过来的json数据方法
     ASP.NET前后台交互之JSON数据 https://www.cnblogs.com/ensleep/p/3319756.html
    02-09
  • Asp.Net 常用工具类之加密——对称加密DES算法
         又到周末,下午博客园看了两篇文章,关于老跳和老赵的程序员生涯,不禁感叹漫漫程序路,何去何从兮!  转眼毕业的第三个年头,去过苏州,跑过上海,从一开始的凌云壮志,去年背起行囊默默回到了长沙准备买房,也想有个家(毕竟年级不小了),有盼
    02-09
点击排行