原文:Asp.Net 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映射的数据库的话,我们添加属性会引发那些常见的问题呢!后面我们继续学习,关于搜索我们就先学习到这里。

Asp.Net MVC5入门学习系列⑥的更多相关文章

  1. Asp.Net MVC5入门学习系列③

    原文:Asp.Net MVC5入门学习系列③ 添加一个视图(View) 接着上篇的入门系列,上面解说添加一个简单Controller(控制器),这里我们简单的在来添加一个View(视图)来展示我们Co ...

  2. Asp.Net MVC5入门学习系列②

    原文:Asp.Net MVC5入门学习系列② 添加一个Controller(控制器) 因为我们用的是Asp.Net MVC,MVC最终还是一套框架,所以我们还是需要遵循它才能玩下去,或者说是更好的利用 ...

  3. Asp.Net MVC5入门学习系列①

    原文:Asp.Net MVC5入门学习系列① 现在直接开始MVC5的学习系列,学习资源来自Micrsoft. 开始使用Asp.Net MVC 5 打开Visual Studio 2013,然后新建一个 ...

  4. Asp.Net MVC5入门学习系列⑦

    原文:Asp.Net MVC5入门学习系列⑦ 接着上篇结尾所说,如果开发中刚才遇到Model需要添加或者减少字段/属性的话,但是刚好你也利用EF的Code frist通过Model生存的数据库,这时改 ...

  5. Asp.Net MVC5入门学习系列⑤

    原文:Asp.Net MVC5入门学习系列⑤ 检查VS生产的编辑方法和编辑窗体 前面我们一步使用强类型,然后创建Controller(控制器)的时候,VS默认已经给我们把CURD都简单的实现了.这篇的 ...

  6. Asp.Net MVC5入门学习系列④

    原文:Asp.Net MVC5入门学习系列④ 添加Model且简单的使用EF 对于EF(EntityFramework)不了解的朋友可以去百度文科或者在园子里搜一些简资源看下,假如和我一样知道EF的概 ...

  7. Asp.Net MVC5入门学习

    添加一个Controller(控制器) 因为我们用的是Asp.Net MVC,MVC最终还是一套框架,所以我们还是需要遵循它才能玩下去,或者说是更好的利用来便于我们的开发,要是对MVC概念还有点模糊的 ...

  8. MVC5入门学习系列④

    添加Model且简单的使用EF 对于EF(EntityFramework)不了解的朋友可以去百度文科或者在园子里搜一些简资源看下,假如和我一样知道EF的概念,那么就知道EF有一个code first的 ...

  9. Bootstrap3.0入门学习系列

    Bootstrap3.0入门学习系列规划[持续更新]   前言 首先在此多谢博友们在前几篇博文当中给与的支持和鼓励,以及在回复中提出的问题.意见和看法. 在此先声明一下,之前在下小菜所有的随笔文章中, ...

随机推荐

  1. epoll演示样本

    server参考是别人的代码 #include <stdio.h> #include <stdlib.h> #include <errno.h> #include ...

  2. GDI+学习笔记(六)渐变画笔

    刷,顾名思义,它是一样的刷.提请设备,还记得常唱歌曲,"我是一个画家.." 好吧.跑题了. 本系列博客希望尽可能简单的描写叙述每项功能,而不希望把每一个參数都介绍的详具体细,假设须 ...

  3. AngularJS 实现按需异步加载

    习惯了 seajs 的异步加载方式,也想着 angular 也能同样使用异步加载,但是事实不随人愿. angularjs 和 requirejs 一样,使用的是预先加载的方式组织模块(这和 seajs ...

  4. 【BZOJ3627】【JLOI2014】路径规划 分层图

    意甲冠军:要查找.有门户网站:http://www.lydsy.com/JudgeOnline/problem.php? id=3627 注意:点的等待时长示意图为: 非常清晰了吧?没事,不清晰就不清 ...

  5. SGU 548 Dragons and Princesses

    意甲冠军: n个月格儿  所有的格龙或公主的儿子  从勇士1走n  不杀  杀死有钱拿  路过公主  假设之前杀龙的数量满足公主要求就会停止行走  问  勇士想多拿钱  可是必需要满足n格子的公主  ...

  6. 采用shell脚本统计代码的行数

    刚毕业那会儿有一次去台湾公司面试,我问多行代码怎么写.我从来没有想过这个问题,粗略计算,.惊叹:大概几十万行不行. 最近整理资料,看着eclipse左边全面上市,我觉得这个东西.代码共同拥有的行倒底总 ...

  7. iOS学习 plist读取和写入文件

    干iOS开发时间.后经常用来plist文件,  那plist什么文件是它? 它的全称是:Property List.属性列表文件.它是一种用来存储串行化后的对象的文件.属性列表文件的扩展名为.plis ...

  8. MOCK.JS 生成随机数据,拦截 Ajax 请求

    mock.js 的用处 前后端分离 :让前端攻城师独立于后端进行开发. 增加单元测试的真实性 :通过随机数据,模拟各种场景. 开发无侵入 :不需要修改既有代码,就可以拦截 Ajax 请求,返回模拟的响 ...

  9. POJ 1066 Treasure Hunt(相交线段&amp;&amp;更改)

    Treasure Hunt 大意:在一个矩形区域内.有n条线段,线段的端点是在矩形边上的,有一个特殊点,问从这个点到矩形边的最少经过的线段条数最少的书目,穿越仅仅能在中点穿越. 思路:须要巧妙的转换一 ...

  10. rdlc报告vs2008编辑正常,在vs2012在对错误的编辑

    最近我们的系统开发的工具vs2008升级到2012,由于系统是非常的报告是由rdlc发展.今天 有需要修改的报告满足需求.直接使用vs2012正确rdlc报告编辑,结果本次变动后.报表都报错. 后来我 ...