C#基础系列06 -- 全栈第三步 -- 说好的增加搜索

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

大家好, 欢迎大家持续关注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. 到这里我们就完成了增删改查的全部功能.  留给大家几个问题: 

 

  1. a. 对于Movie,如果想要增加属性字段怎么操作 ? 
  2. b. 如果想要新增其他搜索字段, 比如需要搜索Price, 怎么做?  Price是Decimal, 搜索做法和Title/String 一样吗? 
  3. c. 如果需要调整数据格式 <长度/字符组成/格式>, 要怎么设置? 

这些问题后续会继续讲解.  欢迎大家跟着这个系列获得C#的相关技能实现转型和升级. 也欢迎大家关注公众号一同成长. 

 

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值