MVC5搜索/查询 流程功能的实现

时间:2021-04-11 00:24:41

接着上次的篇幅,我们这篇手动来写一个查询的流程代码!

 搜索/查询 流程功能的实现

那现在要做搜索(查询)功能我们第一步应该做什么呢!第一次是不是我们应该去Controller(控制器)里去搞一个搜索(查询)的方法(action),那么我就说做搜索功能吧!搜索可能是根据名字搜索,如果根据某一个条件搜索的话,那么我们的方法就需要一个参数,如果是多个条件的话就需要多个参数给方法传递多个参数,这么说你的方法的参数多少是不是就取决你我们的搜索条件。我们开始就先做一个简单的单条件查询。

我们把这个搜索的功能做到MoiveController里的Index方法(action)里,具体做法如下:

MVC5搜索/查询 流程功能的实现

这里的查询语法用的是Linq的写法,里面也含有简单的Lambda表达式,当然这种写法在MVC的Controller具体的Action方法上是很常见的,对于Linq不太熟悉的可以去园子上找一些资料看看。

写完这个Index方法后,这个时候这个Index方法已经具有搜索功能了,我们运行起来看看:

MVC5搜索/查询 流程功能的实现

因为我们知道它的默认的路由机制是{controller}/{action}/{id}.....,那么我们现在来模拟HTTP来拼下,这里主要是为了验证我们写的搜索方法看看是不是有效,那么我们现在就模拟HTTP拼写一个请求去访问我们的搜索方法,具体操作如下:

MVC5搜索/查询 流程功能的实现

模拟请求完结果还是不动,这里不是本人的粗心而是有意写错的,如果你细心的话,你会发现上面改的Action在返回的时候是存在问题的,这个一般也是新手最容易犯错的地方,首先方法里我们都根据参数去查了一遍所以返回的应该是我们查询的结果,而不是EF的强类型的ToList()集合,所以在这里要多多留心。那么我们修改上面的方法如下:

MVC5搜索/查询 流程功能的实现

改完之后我们在重复上面的模拟HTTP请求的操作,在来看看结果:

MVC5搜索/查询 流程功能的实现

这样是不是OK的啦,现在我们的搜索方法是写好了,但是我们总不能是搜索都要去地址栏去拼参数来完成这个操作,这样做是不是就有点太吓了,所以我们要在我们的Index.cshtml页面上添加一个搜索框供用户输入这样是不是就有好多了,下来我们就来做这么一件事,修改index.cshtml代码如下:

MVC5搜索/查询 流程功能的实现

Html.BeginFrom也是一个在MVC应用程序常用的属性,它可以以提交From表达类似的动作把当前的From数据以特定的方式提交到对应的Controller(控制器)的方法(Action),与ActionLink一样它也有三个参数,只不过BeginFrom的参数取更加明了,首先第一个参数是说你要提交给那个动作(action)/方法,所以这里你就给一个处理或者说接受的方法名;第二参数是说你要提交到哪里去,说白了你是要交个那个Controller(控制器)来负责,所以这里你要给一个Controller控制器的名字,第三个则是选择你要提交的方式。

言归正传,在Index.cshtml添加完这个东西,我们运行起来再看看我们的首页:

MVC5搜索/查询 流程功能的实现

这样的界面相当起来是不是就友好多了。

因为我们MovieController里的Index方法你没有去指定去接受POST的请求还是GET的请求,所以们现在手动写一个接受POST请求的方法,看看POST请求过来都有什么动作,在MovieController添加一个下面的方法,方法如下:

MVC5搜索/查询 流程功能的实现

然后我们在运行起来看看执行的结果,如下图:

MVC5搜索/查询 流程功能的实现

当然实际应用程序的逻辑可能要比这个复杂百倍所以这个要根据情况而定了,这个时候要是想让你的请求结果在Index的列表页面出现的话,其实也很简单,只需要把Index.cshtml我们刚才写的BeginForm的FormMethod.Post改成FormMethod.Get即可,如下所示:

MVC5搜索/查询 流程功能的实现

改完然后运行程序,效果入下:

MVC5搜索/查询 流程功能的实现

那现在我的搜索条件要是在稍微复杂一点的话,比如说我要加根据Genre(音乐类型)和Title(音乐名称)一起搜索,并且音乐类型是一个可以选择的而不是我手动去输入的,这个时候比较起刚才的单条件查询就要稍微复杂一点了,首先必须动态读出数据库里所有的音乐类型然后以下拉列表的形式供用户选择,只要做到这一点,那我们的目标就完成90%,好有了需求那么就去搞这么一件事情,为了下拉效果明显,我在数据库里添加一些测试数据,数据如下:

MVC5搜索/查询 流程功能的实现

添加完数据,我们现在就是想办法把这个数据读出来然后动态的绑定到页面即可,那我们该怎么做呢!我们只要音乐类型的话用什么方式来存查询的结果比较合适,应该是数组吧!那么我们用数组来存读出来的音乐类型数据,具体操作如下:

MVC5搜索/查询 流程功能的实现

添加一个参数,然后把查询所有的音乐类型放到集合里通过动态字典接受在页面绑定,查询/搜索的时候传递音乐类型进来不为空的话去数据库匹配一下,找数据到就返回,说的可能不是很严谨,不过实际上干的事情就是这么多。完了我们看看页面这么绑定这个动态字典,变成我们预期的下拉框呢!页面修改如下:

MVC5搜索/查询 流程功能的实现

这里的DropDownList第一个参数就是接受返回窗体的名字,这时我们把动态字典给他他会自己解析,第二参数是显示的默认值这个值我们可以随便给也可以为null,编辑完页面,我们在运行起来看看效果:

MVC5搜索/查询 流程功能的实现

这样是不是就达到预期的效果,随便查询一个结果看看能不能查询到结果:

MVC5搜索/查询 流程功能的实现

OK,效果实现了如果更多的参数做法还是一样的,我们的搜索就先做到这里,后续的话我们给Model添加属性,因为我们的数据库是EF根据Model映射出来了,所以在实际应用中有些情况下Model会有一些小小的改动,那如果是通过EF code frist映射的数据库的话,我们添加属性会引发那些常见的问题呢!后面我们继续学习,关于搜索我们就先学习到这里。

宝剑锋从磨砺出,梅花香自苦寒来!一起努力ing......
 
标签: MVC5

MVC5搜索/查询 流程功能的实现的更多相关文章

  1. CodeIgniter框架多条件搜索查询分页功能解决方案

    最近在用ci框架写功能的时候,需要用到分页功能,本来寻常的数据结果分页是比较简单的,但是这次写的功能是多条件搜索查询分页,就有点难度了,看官方手册下面评论好多人问, 正常的分页功能例子是这样的: $t ...

  2. mysql高级教程(一)-----逻辑架构、查询流程、索引

    mysql逻辑架构 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提 ...

  3. Entity Framework 6 Recipes 2nd Edition(13-4)译 -> 有效地创建一个搜索查询

    问题 你想用LINQ写一个搜索查询,能被转换成更有效率的SQL.另外,你想用EF的CodeFirst方式实现. 解决方案 假设你有如下Figure 13-6所示的模型 Figure 13-6. A s ...

  4. Android FM模块学习之二 FM搜索频率流程

    上一篇大概分析了一下FM启动流程,若不了解Fm启动流程的,能够去打开前面的链接先了解FM启动流程,接下来我们简单分析一下FM的搜索频率流程. 在了解源代码之前.我们先看一下流程图: 事实上从图中能够看 ...

  5. 【译】ASP.NET MVC 5 教程 - 8:搜索查询

    原文:[译]ASP.NET MVC 5 教程 - 8:搜索查询 添加一个搜索的方法和搜索的视图 在本节中,我们为 Index 方法添加查询功能,使我们能够根据电影的题材或名称进行查找. 修改 Inde ...

  6. Graylog日志管理系统---搜索查询方法使用简介

    Elasticsearch 是一个基于 Lucene 构建的开源.分布式.提供 RESTful 接口的全文搜索引擎 一.Search页面的各位置功能介绍: 1.日志搜索的时间范围 为了使用方便,预设有 ...

  7. ElasticSearch High Level REST API【2】搜索查询

    如下为一段带有分页的简单搜索查询示例 在search搜索中大部分的搜索条件添加都可通过设置SearchSourceBuilder来实现,然后将SearchSourceBuilder RestHighL ...

  8. Activiti 查询流程定义

    package com.mycom.processDefinition; import java.io.InputStream; import java.util.List; import java. ...

  9. Solr4.8.0源码分析(5)之查询流程分析总述

    Solr4.8.0源码分析(5)之查询流程分析总述 前面已经写到,solr查询是通过http发送命令,solr servlet接受并进行处理.所以solr的查询流程从SolrDispatchsFilt ...

随机推荐

  1. MySQL 在 LIMIT 条件后注入

    from:https://rateip.com/blog/sql-injections-in-mysql-limit-clause/ 此方法适用于MySQL 5.x中,在limit语句后面的注入例如: ...

  2. JVM之类加载器上篇

    首先我们先看一个示例程序: package com.tfdd.test; /** * @desc 类加载校验 * @author chenqm * @date 2016年2月2日 */ class S ...

  3. .net架构设计读书笔记--第三章 第8节 域模型简介(Introducing Domain Model)

    一.数据--行为转变     很长的时间,典型的分析方法或多或少是以下两种,第一,收集需求并做一些分析,找出有关实体 (例如,客户. 订单. 产品) 和进程来实现. 第二,手持这种理解你尝试推断一个物 ...

  4. C++运用SDK截屏

    引言 最近有一个需要截取当前屏幕,并保存成BMP文件的需求.整个需求,拆分成三步:1.截取屏幕,获得位图数据.2.配合bmp文件结构信息,将数据整合.3.对整合后的数据做操作,如保存在本地.通过网络传 ...

  5. 在Eclipse中添加添加一些有助于开发的插件

    Eclipse不像MyEclipse那样高度的继承了很多插件,Eclipse需要使用什么插件可以自己进行添加,添加tomcatPlugin插件,成功之后你的Eclipse中就会多了几个图标. 参照文章 ...

  6. 谁是谁的first-child

    看过CSS伪类选择器之后,心想也就如此嘛,:first-child选择元素的第一个子元素,有什么难的,可一到实践中,还是到处碰壁啊. <body> <ul class="f ...

  7. 隐藏Activity标题栏

    <span style="font-size:18px;"> </span> 要让Activity的标题栏不被显示的情况分两种: 一.不显示标题栏的不论什么 ...

  8. UE4 Hello World 创建第一个UE4工程

    首先先熟悉几个UE4常用的类 AGameMode(控制整个项目的逻辑) The GameMode defines the game being played. It governs thegame r ...

  9. BZOJ&lowbar;3555&lowbar;&lbrack;Ctsc2014&rsqb;企鹅QQ&lowbar;哈希

    BZOJ_3555_[Ctsc2014]企鹅QQ_哈希 Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为 ...

  10. OI生涯回忆录 2018&period;11&period;12~2019&period;4&period;15

    上一篇:OI生涯回忆录 2017.9.10~2018.11.11 一次逆风而行的成功,是什么都无法代替的 ………… 历经艰难 我还在走着 一 NOIP之后,全机房开始了省选知识的自学. 动态DP,LC ...