MVC5搜索/查询 流程功能的实现
接着上次的篇幅,我们这篇手动来写一个查询的流程代码!
搜索/查询 流程功能的实现
那现在要做搜索(查询)功能我们第一步应该做什么呢!第一次是不是我们应该去Controller(控制器)里去搞一个搜索(查询)的方法(action),那么我就说做搜索功能吧!搜索可能是根据名字搜索,如果根据某一个条件搜索的话,那么我们的方法就需要一个参数,如果是多个条件的话就需要多个参数给方法传递多个参数,这么说你的方法的参数多少是不是就取决你我们的搜索条件。我们开始就先做一个简单的单条件查询。
我们把这个搜索的功能做到MoiveController里的Index方法(action)里,具体做法如下:
这里的查询语法用的是Linq的写法,里面也含有简单的Lambda表达式,当然这种写法在MVC的Controller具体的Action方法上是很常见的,对于Linq不太熟悉的可以去园子上找一些资料看看。
写完这个Index方法后,这个时候这个Index方法已经具有搜索功能了,我们运行起来看看:
因为我们知道它的默认的路由机制是{controller}/{action}/{id}.....,那么我们现在来模拟HTTP来拼下,这里主要是为了验证我们写的搜索方法看看是不是有效,那么我们现在就模拟HTTP拼写一个请求去访问我们的搜索方法,具体操作如下:
模拟请求完结果还是不动,这里不是本人的粗心而是有意写错的,如果你细心的话,你会发现上面改的Action在返回的时候是存在问题的,这个一般也是新手最容易犯错的地方,首先方法里我们都根据参数去查了一遍所以返回的应该是我们查询的结果,而不是EF的强类型的ToList()集合,所以在这里要多多留心。那么我们修改上面的方法如下:
改完之后我们在重复上面的模拟HTTP请求的操作,在来看看结果:
这样是不是OK的啦,现在我们的搜索方法是写好了,但是我们总不能是搜索都要去地址栏去拼参数来完成这个操作,这样做是不是就有点太吓了,所以我们要在我们的Index.cshtml页面上添加一个搜索框供用户输入这样是不是就有好多了,下来我们就来做这么一件事,修改index.cshtml代码如下:
Html.BeginFrom也是一个在MVC应用程序常用的属性,它可以以提交From表达类似的动作把当前的From数据以特定的方式提交到对应的Controller(控制器)的方法(Action),与ActionLink一样它也有三个参数,只不过BeginFrom的参数取更加明了,首先第一个参数是说你要提交给那个动作(action)/方法,所以这里你就给一个处理或者说接受的方法名;第二参数是说你要提交到哪里去,说白了你是要交个那个Controller(控制器)来负责,所以这里你要给一个Controller控制器的名字,第三个则是选择你要提交的方式。
言归正传,在Index.cshtml添加完这个东西,我们运行起来再看看我们的首页:
这样的界面相当起来是不是就友好多了。
因为我们MovieController里的Index方法你没有去指定去接受POST的请求还是GET的请求,所以们现在手动写一个接受POST请求的方法,看看POST请求过来都有什么动作,在MovieController添加一个下面的方法,方法如下:
然后我们在运行起来看看执行的结果,如下图:
当然实际应用程序的逻辑可能要比这个复杂百倍所以这个要根据情况而定了,这个时候要是想让你的请求结果在Index的列表页面出现的话,其实也很简单,只需要把Index.cshtml我们刚才写的BeginForm的FormMethod.Post改成FormMethod.Get即可,如下所示:
改完然后运行程序,效果入下:
那现在我的搜索条件要是在稍微复杂一点的话,比如说我要加根据Genre(音乐类型)和Title(音乐名称)一起搜索,并且音乐类型是一个可以选择的而不是我手动去输入的,这个时候比较起刚才的单条件查询就要稍微复杂一点了,首先必须动态读出数据库里所有的音乐类型然后以下拉列表的形式供用户选择,只要做到这一点,那我们的目标就完成90%,好有了需求那么就去搞这么一件事情,为了下拉效果明显,我在数据库里添加一些测试数据,数据如下:
添加完数据,我们现在就是想办法把这个数据读出来然后动态的绑定到页面即可,那我们该怎么做呢!我们只要音乐类型的话用什么方式来存查询的结果比较合适,应该是数组吧!那么我们用数组来存读出来的音乐类型数据,具体操作如下:
添加一个参数,然后把查询所有的音乐类型放到集合里通过动态字典接受在页面绑定,查询/搜索的时候传递音乐类型进来不为空的话去数据库匹配一下,找数据到就返回,说的可能不是很严谨,不过实际上干的事情就是这么多。完了我们看看页面这么绑定这个动态字典,变成我们预期的下拉框呢!页面修改如下:
这里的DropDownList第一个参数就是接受返回窗体的名字,这时我们把动态字典给他他会自己解析,第二参数是显示的默认值这个值我们可以随便给也可以为null,编辑完页面,我们在运行起来看看效果:
这样是不是就达到预期的效果,随便查询一个结果看看能不能查询到结果:
OK,效果实现了如果更多的参数做法还是一样的,我们的搜索就先做到这里,后续的话我们给Model添加属性,因为我们的数据库是EF根据Model映射出来了,所以在实际应用中有些情况下Model会有一些小小的改动,那如果是通过EF code frist映射的数据库的话,我们添加属性会引发那些常见的问题呢!后面我们继续学习,关于搜索我们就先学习到这里。
MVC5搜索/查询 流程功能的实现的更多相关文章
- CodeIgniter框架多条件搜索查询分页功能解决方案
最近在用ci框架写功能的时候,需要用到分页功能,本来寻常的数据结果分页是比较简单的,但是这次写的功能是多条件搜索查询分页,就有点难度了,看官方手册下面评论好多人问, 正常的分页功能例子是这样的: $t ...
- mysql高级教程(一)-----逻辑架构、查询流程、索引
mysql逻辑架构 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提 ...
- Entity Framework 6 Recipes 2nd Edition(13-4)译 -> 有效地创建一个搜索查询
问题 你想用LINQ写一个搜索查询,能被转换成更有效率的SQL.另外,你想用EF的CodeFirst方式实现. 解决方案 假设你有如下Figure 13-6所示的模型 Figure 13-6. A s ...
- Android FM模块学习之二 FM搜索频率流程
上一篇大概分析了一下FM启动流程,若不了解Fm启动流程的,能够去打开前面的链接先了解FM启动流程,接下来我们简单分析一下FM的搜索频率流程. 在了解源代码之前.我们先看一下流程图: 事实上从图中能够看 ...
- 【译】ASP.NET MVC 5 教程 - 8:搜索查询
原文:[译]ASP.NET MVC 5 教程 - 8:搜索查询 添加一个搜索的方法和搜索的视图 在本节中,我们为 Index 方法添加查询功能,使我们能够根据电影的题材或名称进行查找. 修改 Inde ...
- Graylog日志管理系统---搜索查询方法使用简介
Elasticsearch 是一个基于 Lucene 构建的开源.分布式.提供 RESTful 接口的全文搜索引擎 一.Search页面的各位置功能介绍: 1.日志搜索的时间范围 为了使用方便,预设有 ...
- ElasticSearch High Level REST API【2】搜索查询
如下为一段带有分页的简单搜索查询示例 在search搜索中大部分的搜索条件添加都可通过设置SearchSourceBuilder来实现,然后将SearchSourceBuilder RestHighL ...
- Activiti 查询流程定义
package com.mycom.processDefinition; import java.io.InputStream; import java.util.List; import java. ...
- Solr4.8.0源码分析(5)之查询流程分析总述
Solr4.8.0源码分析(5)之查询流程分析总述 前面已经写到,solr查询是通过http发送命令,solr servlet接受并进行处理.所以solr的查询流程从SolrDispatchsFilt ...
随机推荐
- HDU 4085 Steiner树
主题链接:pid=4085">http://acm.hdu.edu.cn/showproblem.php? pid=4085 由于这题专门花一晚上学习斯坦纳树.找到比較好的学习资料,链 ...
- dede织梦背景经常使用标签
一些非常实用的标签调用的方法 关键描写叙述调用标签: <meta name="keywords" content="{dede:field name='keywor ...
- 开源服务发现项目Zookeeper,Doozer,Etcd
这篇文章是Jason Wilder对于常见的服务项目发现Zookeeper.Doozer,Etcd所写的一篇博客,其原文地址例如以下:Open-Source Service Discovery. 服务 ...
- 查询oracle sql运行计划,一个非常重要的观点--dba_hist_sql_plan
该文章的作者给予了极大的帮助长老枯荣,为了表达我的谢意. 这适用于oracle db版本号oracle 10g或者更高的版本号. 之所以说这种看法是非常重要的,因为观点是有之一awrsqrpt报告没有 ...
- UVA 10870 - Recurrences(矩阵高速功率)
UVA 10870 - Recurrences 题目链接 题意:f(n) = a1 f(n - 1) + a2 f(n - 2) + a3 f(n - 3) + ... + ad f(n - d), ...
- RQNOJ PID2 / 开心的金明
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N 元钱就行”.今 ...
- Chapter 2 User Authentication, Authorization, and Security(3):保server避免暴力袭击
原版的:http://blog.csdn.net/dba_huangzj/article/details/38756693,专题文件夹:http://blog.csdn.net/dba_huangzj ...
- linux_安装_安装编译phantomjs 2.0的方法_转
项目中要对数据公式webkit渲染,phantmjs 2.0的效果好比1.9好不少. 安装过程中 坑比较多. 转载文章: phantomjs 2.0最新版的官方不提供编译好的文件下载,只能自己编译,有 ...
- Scriptcase演示程序,现在,他们使用SC多么简单的开发系统
Scriptcase它内置了一批成熟的业务系统,我们的系统的一部分已经完成和功能微调,在互联网上.检查每个人Scriptcase如何简单可以加速的功能模块的发展. 访问 http://www.phps ...
- Java实现顺序表
利用顺序存储结构表示的顺序表称为顺序表. 它用一组连续的地址存储单元一次存放线性表中的数据元素. 顺序表的实现是数据结构中最简单的一种. 由于代码中已经有详细注释,代码外不再阐述. 下次再陈上关于顺序 ...