学习ASP .NET MVC5官方教程总结(八)搜索查询
2015-05-02 22:01
411 查看
学习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 模型添加属性,以及如何添加一个自动创建测试数据库的初始值。
相关文章推荐
- 学习ASP .NET MVC5官方教程总结(十)添加验证
- 学习ASP .NET MVC5官方教程总结(十一)Details 和 Delete 方法详解
- 学习ASP .NET MVC5官方教程总结(四)添加模型
- 学习ASP .NET MVC5官方教程总结目录
- 学习ASP .NET MVC5官方教程总结(九)添加新字段
- 学习ASP .NET MVC5官方教程总结(二)添加控制器
- 学习ASP .NET MVC5官方教程总结(三)添加视图
- 学习ASP .NET MVC5官方教程总结(五)使用SQL Server LocalDB创建连接字符串
- 学习ASP .NET MVC5官方教程总结(七)Edit方法和Edit视图详解
- 学习ASP .NET MVC5官方教程总结(一)入门
- 学习ASP .NET MVC5官方教程总结(六)通过控制器访问模型的数据
- Swift教程_通过改造官方Sample学习Swift(九)_总结
- JavaEE学习总结(5) - 通用分页的实现,可搜索查询。
- 倒排链上的查询剪枝技术学习总结
- 马士兵spring教程学习总结
- RabbitMQ学习总结(3)——入门实例教程详解
- Oracle学习_3 sql子查询,自连接,单行select总结
- Mysql学习总结(23)——MySQL统计函数和分组查询
- Redis学习总结(1)——Redis内存数据库详细教程
- Asp.Net MVC4.0 官方教程 入门指南之七--增加搜索方法和视图