ASP.NET MVC5 入门八——添加搜索

添加一个搜索的方法和搜索的视图

接下来我们添加搜索功能,可以根据电影的标题搜索。

第一步:更新index窗体

在最开始MVC入门说过,MVC一个好处就是关注点分离。当我们需要修改和数据有关的东西,只要去修改Controller 就可以。现在我们去修改MoviesController的Index方法:

image

第一行的LINQ查询用来选择Movies。仅仅是定义了movies代表数据库中的哪些,还没有开始查询。接下来判断查询的字符串是否为空,如果不为空就开始查询标题一样的电影。

s => s.Title 这是一个Lambda 表达式。一般用在基于方法的LINQ查询中,比如上面的Where。

我们现在F5运行一下看看,在地址栏后面加上?searchString=中国

image

image

当然,我们不能让用户一直在地址栏加上那么一串来搜索,普遍做法是,在页面顶部加一个搜索框。看到这个就知道需要改动View部分。我们打开Views\Movies\Index.cshtml 文件,在Create New后面加上如下代码:

image

image

可以发现,我们并没有添加控制器中Index的POST请求,也能正常查询。我们现在添加HttpPost方法

image

image

我们会发现,GET和POST请求的url都是一样的,都是 localhost:xxx/Movies/Index 。假如我们想要把链接发给朋友,让他知道我想看哪些电影,但是这些查询信息却没有在url里面体现,这样不肯能发送给朋友。

解决方法是利用 BeginForm 的重载,有个指定POST请求添加搜索信息到url中。

@using (Html.BeginForm(“Index”,”Movies”,FormMethod.Get))

改成如上的代码,就可以指定用GET方法提交,哪怕你已经有了HttpPost 的方法。

image

接下来:添加更多搜索

把刚才测试的Index HttpPost 方法删除,我们接下来添加一个功能,让用户可以按照类型来搜索电影。同样是修改Index的方法。代码如下:

public ActionResult Index(string movieGenre,string searchString)
        {
            var GenreLst = new List();
            var GenreQry = from d in db.Movie
                           orderby d.Genre
                           select d.Genre;
            GenreLst.AddRange(GenreQry.Distinct());
            ViewBag.movieGenre = new SelectList(GenreLst);
            var movies = from m in db.Movie
                                 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);
        }

第三行的代码,我们添加了一个List对象来保存从数据库取出的电影类型数据。第四行代码是一个LINQ查询。第五行代码我们把获得查询结果存到LIST里面,用了 Distinct 方法,过滤重复对象。

控制器的代码搞定后,就是修改View,在添加一个搜索框。

image

添加的 @Html.DropDownList(“movieGenre”,”All”)  其中的参数 moiveGenre 会去 ViewBag 里面查询时候存在 IEnumerable<SelectListItem>的参数。在控制器的代码中,我们给ViewBag添加了SelectList参数。

image

我们运行看看:

image

image

image

可以看出,利用MVC开发网站是非常的方便,快捷。

下一节,添加新的属性(字段)到Model(数据库模型)中。

发表评论

电子邮件地址不会被公开。