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 ...
随机推荐
- Ubuntu中全然卸载Nginx
Nginx尽管好用,可是一旦关键配置文件被改动,想要卸载重装却是相当困难.本人由于採用apt-get方式安装后又源代码安装了Nginx,结果出现冲突,卸载不了,安装不上,非常是蛋疼.基本的问题还是Ng ...
- Codeforces 383C . Propagating tree【树阵,dfs】
标题效果: 有一棵树,有两种操作模式对本树:1:表示为(1 x val),在NOx加在节点上val,然后x每个节点加上儿子- val.给每个儿子一个儿子在一起-(- val),加到没有儿子为止.2:表 ...
- EXCEL 两人的建立Y轴
在本文中,EXCEL2013基于,操作的其他版本基本上相同模式 原始数据和最后的结果如下面的: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvanloX2p ...
- Ajax 实现无刷新页面
注意:如本文所用,在前面的文章库的数目可以在源代码中找到,我将指示在文本,其中链路,为了缩短制品的长度,阅读由此带来的不便.乞求被原谅. 评论文章 Ajax 实现无刷新页面.其原理.代码库.代码. 这 ...
- Android SDCard Mount 流程分析
前段时间对Android 的SDCard unmount 流程进行了几篇简短的分析,由于当时只是纸上谈兵,没有实际上的跟进,可能会有一些误导人或者小错误.今天重新梳理了头绪,针对mount的流程再重新 ...
- 同一个ASP.NET页面放置多个UpdatePanel分别刷新的解决办法。.
原文:同一个ASP.NET页面放置多个UpdatePanel分别刷新的解决办法.. ScriptManager添加EnablePartialRending属性 <asp:ScriptManage ...
- ASPxComboBox控件联动效果bug改进
原文:ASPxComboBox控件联动效果bug改进 在应用第三方控件DevExpress控件的时候,大家应该对ASPxComboBox控件应该不是很陌生吧,尤其在做多级联动效果的时候,有着它独特的地 ...
- 用C#绘图实现动画出现卡屏(运行慢)问题的解决办法
原文:用C#绘图实现动画出现卡屏(运行慢)问题的解决办法 正在用C#做一个小游戏,需要用到动画,上次解决的问题是闪烁问题,用双缓冲技术.以为不会有什么问题了.后来当把图片全部绘制上去的时候依然出现了卡 ...
- nodejs安装:nodejs入门
nodejs开篇 前几天看到好多关于node 的帖子没有单独说明node安装的文章~ 特发此篇 总结一下平时在windows上nodejs的安装... 1.js来搞前后端分离是nodejs的一大特点, ...
- crawler_x-requested-with 请求头
在分析微博热点话题时 拿到异步请求后,有个关键参数 x-request-with 不携带不给正确响应 在服务器端判断request来自Ajax请求(异步)还是传统请求(同步): 两种请求在请求的He ...