大家好, 欢迎大家持续关注C#系列一同轻松掌握C#, 做人群里的一个传统味低调范小能手. 练习05 里面预留了一个问题: 增删改查里面的查功能怎么开. 在今天的示例里面,我们就探讨一下简单的搜索功能. 还是用之前的 visual studio solution 案例, 以便保持连续性.
1. 打开练习05里面使用的solution, 点击Pages/Movies/Index.cshtml.cs,新增//SearchAttributes 后的示例代码:
SearchString / Genres 是用来搜索的字段, 在Form创建出来后设定了对应搜索范围
public class IndexModel : PageModel
{
private readonly RazorPagesMovie.Models.RazorPagesMovieContext _context;
public IndexModel(RazorPagesMovie.Models.RazorPagesMovieContext context)
{
_context = context;
}
//SearchAttributes
public IList<Movie> Movie { get; set; }
[BindProperty(SupportsGet = true)]
public string SearchString { get; set; }
// Requires using Microsoft.AspNetCore.Mvc.Rendering;
public SelectList Genres { get; set; }
[BindProperty(SupportsGet = true)]
public string MovieGenre { get; set; }
public async Task OnGetAsync()
{
// Use LINQ to get list of genres.
IQueryable<string> genreQuery = from m in _context.Movie
orderby m.Genre
select m.Genre;
var movies = from m in _context.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);
}
Genres = new SelectList(await genreQuery.Distinct().ToListAsync());
Movie = await movies.ToListAsync();
}
}
2. 点击 Pages/Movies/Index.cshtml, 新增以下代码. 这部分代码在页面创建了搜索的Form;
<form>
<p>
<select asp-for="MovieGenre" asp-items="Model.Genres">
<option value="">All</option>
</select>
Title: <input type="text" asp-for="SearchString" />
<input type="submit" value="Filter" />
</p>
</form>
3. F5或者点击IIS Express 运行solution, 你应该可以看到搜索的功能对于 Title / Genre 已经开起来了. 1对应Genre, 2对应Title, 点击Filter之后可以看到搜索效果已经出来了;

如果这时候你右键单击页面点击View Page Source, 就能看到我们的代码转换后的结果: 你们的结果里没有MoviePrice, 大家可以想想如果你们也想对Price做搜索,怎么去实现;
<form>
<p>
<select id="MoviePrice" name="MoviePrice">
<option value="">All</option>
<option>1.99</option>
<option>1.99</option>
<option>3.99</option>
<option>8.99</option>
<option>9.99</option>
</select>
<select id="MovieGenre" name="MovieGenre">
<option value="">All</option>
<option>Action</option>
<option>Comedy</option>
<option>Western</option>
</select>
Title: <input type="text" id="SearchString" name="SearchString" value="" />
<input type="submit" value="Filter" />
</p>
</form>
4. 到这里我们就完成了增删改查的全部功能. 留给大家几个问题:
- a. 对于Movie,如果想要增加属性字段怎么操作 ?
- b. 如果想要新增其他搜索字段, 比如需要搜索Price, 怎么做? Price是Decimal, 搜索做法和Title/String 一样吗?
- c. 如果需要调整数据格式 <长度/字符组成/格式>, 要怎么设置?
这些问题后续会继续讲解. 欢迎大家跟着这个系列获得C#的相关技能实现转型和升级. 也欢迎大家关注公众号一同成长.


本文是C#基础系列的第六篇,主要介绍如何在已有的解决方案中添加搜索功能。通过修改Pages/Movies/Index.cshtml.cs和Pages/Movies/Index.cshtml文件,实现了对电影Title和Genre的搜索。运行solution,可以看到搜索功能正常工作。文章末尾提出了关于增加属性字段、添加Price搜索以及数据格式调整的问题,为后续内容埋下伏笔。
1224





