学习ASP .NET MVC5官方教程总结(八)搜索查询

学习ASP .NET MVC5官方教程总结(八)搜索查询

在本节中,我们为 Index 方法添加查询功能,使我们能够根据电影的题材或名称进行查找。

首先,我们需要更新 MoviesController 的 Index 方法,代码如下:

public ActionResult Index(string searchString)
        {
            var movies = from m in db.Movies select m;

            if (!String.IsNullOrEmpty(searchString))
            {
                movies = movies.Where(s => s.Title.Contains(searchString));
            }

            return View(movies);
        }

Index 方法的第一行代码创建了一个 LINQ 查询,用来选择符合条件的电影:

var movies = from m in db.Movies select m;

这个查询虽然在这里定义出来,但并没有在数据库中执行。

如果 searchString 参数包含一个字符串(不是空字符串),movies 查询将会添加一个查询字符串的过滤条件,代码如下:

if (!String.IsNullOrEmpty(searchString))
            {
                movies = movies.Where(s => s.Title.Contains(searchString));
            }

代码中的 s => s.Title 是一个 Lambda 表达式,Lambda 表达式被用在基于方法的LINQ查询中(上面代码中的 Where 方法),当做参数来使用。LINQ 语句在定义或修改的时候不会执行,相反的,查询会延迟执行,这意味着一个赋值语句直到迭代完成或调用 ToList 方法才具备真正的值。在上面的示例中,查询语句在 Index.cshtml 视图中执行。

现在,你可以修改Index 视图,让他展示一个表单给用户输入。

如果你把 Index 方法的参数名改为 id,那么 id 参数将会匹配 App_Start\RouteConfig.cs 文件中的默认路由中的{id}

{controller}/{action}/{id}

修改后的Index方法如下:

public ActionResult Index(string id)
        {
            string searchString = id;
            var movies = from m in db.Movies select m;
            if (!String.IsNullOrEmpty(searchString))
            {
                movies = movies.Where(s => s.Title.Contains(searchString));
            }
            return View(movies);
        }

修改以后,我们可以通过路由数据来传递查询字符串。

然而,你不能指望用户每次都通过修改URL来查找电影,因此你需要在界面上帮助他们过滤数据。

打开Views\Movies\Index.cshtml  文件,在@Html.ActionLink("Create New", "Create") 后面添加如下代码:

@Html.ActionLink("Create New", "Create")
    @using (Html.BeginForm())
    {
    <p>
        Title: @Html.TextBox("SearchString") <br />
        <input type="submit" value="Filter" />
    </p>    }

Html.BeginForm 帮助方法创建一个 <form>  标签。通过单击“Filter”按钮将表单提交给当前的页面。

然后,我们修改 Index 方法的代码,使它能够根据题材进行查询。修改后的代码如下

public ActionResult Index(string movieGenre, string searchString)
{
    var GenreLst = new List<string>();

    var GenreQry = from d in db.Movies
                   orderby d.Genre
                   select d.Genre;
    GenreLst.AddRange(GenreQry.Distinct());
    ViewBag.movieGenre = new SelectList(GenreLst);
    var movies = from m in db.Movies
                 select m;
    if (!String.IsNullOrEmpty(searchString))
    {
        movies = movies.Where(s => s.Title.Contains(searchString));
    }
    if (!string.IsNullOrEmpty(movieGenre))
    {
        movies = movies.Where(x => x.Genre == movieGenre);
    }
    return View(movies);
}

在修改完控制器之后,我们还需要在Index视图中添加一个字段。在我们之前的名字查询之前,使用 Html.DropDownList 添加一个下拉框,修改后的代码如下:

@using (Html.BeginForm("Index", "Movies", FormMethod.Get))
{
<p>    Genre: @Html.DropDownList("movieGenre", "All")
    Title: @Html.TextBox("SearchString") <br />
    <input type="submit" value="Filter" />
</p>}

代码 @Html.DropDownList("movieGenre", "All") 生成一个下拉列表,参数 movieGenre 指明要查找的ViewBag 中的数据集合的名称.

在本章中,我们创建了查询的方法和视图,使用户可以根据电影的标题和题材进行查询。在下一章中,我们将讲解如何为Movie 模型添加属性,以及如何添加一个自动创建测试数据库的初始值。

时间: 2024-08-01 10:44:16

学习ASP .NET MVC5官方教程总结(八)搜索查询的相关文章

学习ASP .NET MVC5官方教程总结(七)Edit方法和Edit视图详解

学习ASP .NET MVC5官方教程总结(七)Edit方法和Edit视图详解 在本章中,我们研究生成的Edit方法和视图.但在研究之前,我们先将 release date 弄得好看一点.打开Models\Movie.cs 文件.先添加一个引用: <span style="font-size:14px;">using System.ComponentModel.DataAnnotations;</span> 然后在Movie类中添加以下代码: [Display(

学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据

学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据 在本章中,我们将新建一个MoviesController 控制器,并编写获取电影数据的代码,使用视图模板将数据展示在浏览器中. 在进行下一步之前,你需要先编译应用程序,否则在添加控制器的时候会出错. 在解决方法资源管理器的Controllers文件夹右键,选择"添加">"新建搭建基架项": 在"添加支架"对话框,选择 包含视图的MVC 5控制器(使用 En),然后单击

学习ASP .NET MVC5官方教程总结(十一)Details 和 Delete 方法详解

学习ASP .NET MVC5官方教程总结(十一)Details 和 Delete 方法详解 在这一章,我们将研究一下自动生成的 Details 和Delete 方法. 打开Movie控制器,找到Details方法. // // GET: /Movies/Details/5 public ActionResult Details(Int32 id) { Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFou

学习ASP .NET MVC5官方教程总结(四)添加模型

学习ASP .NET MVC5官方教程总结(四)添加模型 在前面的几章中,我们学习了,MVC中"C"和"V"的创建方法和基本的使用方法,这一章我们来看一下"C"--模型的创建方法. 我们将添加一些管理电影数据库的类,这些类在ASP.NET MVC 应用程序中扮演"Model"的角色. 我们将使用.NET Framework平台上熟知的Entity Framework 数据访问技术来定义和使用这些模型.Entity Framew

学习ASP .NET MVC5官方教程总结目录

学习ASP .NET MVC5官方教程总结目录 我是一个刚刚离开校园,专升本完出来实习的专科生,在学校主攻的是java方向,来到实习的恩源公司后,知道公司的开发基本都是用ASP.NET MVC5做开发的.对于我来说这个还是比较陌生的一种技术,但是我相信有了JSP的开发基础后,来学习这个应该不难理解的,于是我从网上找到了MVC5官方教程来看.官方教程分为11个部分,那我的总结也分11部分来写吧,我在每一部分都会总结官方教程的知识和添加自己的理解.但是我接触这个时间也不长,如果那里理解错了,请随便批

学习ASP .NET MVC5官方教程总结(一)入门

学习ASP .NET MVC5官方教程总结(一)入门 在这一部分我们来学习教程的第一部分--入门,在讲之前先说一下我们的开发环境和版本,我们的开发环境是Visual Studio,版本是2013,我这里提供一个下载地址: http://www.iplaysoft.com/vs2013.html ,在这一章主要讲项目的搭建. 既然是讲项目的搭建,那么首当其冲的问题就是新建项目,打开我们的开发环境: .我们在开发环境的起始页面左侧可以清晰的看见4个字:新建项目.很明显这是新建开发项目的一种方式,第二

学习ASP .NET MVC5官方教程总结(二)添加控制器

学习ASP .NET MVC5官方教程总结(二)添加控制器 在这一章我们来简单讲解一下mvc的概念和控制器的建立和使用还有路由的使用. MVC设计模式是现在一种非常主流的开发模式,他有易于测试和维护的优点.它将传统的web开发分成了三个部分:模型-视图-控制器. 基于 MVC 应用程序中包含: Models: 表示应用程序的数据,并使用验证逻辑强制执行业务规则的数据的类. Views: 您的应用程序用来动态生成 HTML 响应的模板文件. Controllers: 处理传入的请求的浏览器,类检索

学习ASP .NET MVC5官方教程总结(十)添加验证

学习ASP .NET MVC5官方教程总结(十)添加验证 在本章中,我们将为Movie模型添加验证逻辑,并确认验证规则在用户试图使用程序创建和编辑电影时有效. ASP.NET MVC 的一个核心原则是DRY(Don't Repeat Yourself - 不做重复的事情).ASP.NET MVC 鼓励你一次性的指定功能或行为,然后应用程序的其它地方通过映射得到它,这样一来就减少了大量的代码,从而减少了出错误的可能性,并且更易于维护. ASP.NET  MVC  和 Entity Framewor

学习ASP .NET MVC5官方教程总结(三)添加视图

学习ASP .NET MVC5官方教程总结(三)添加视图 在上一章中我们讲了MVC中的"C",控制器Controllers,这一章我们来讲"V",视图Views的知识. 首先,打开我们的项目,打开我们的HelloWorldController,并修改Index(): <span style="font-size:14px;">public ActionResult Index() { return View(); }</span