ASP.NET Core Razor页面搜索字符串无结果问题求助
排查ASP.NET Core Razor页面搜索功能无效问题
嘿,我一眼就发现问题出在哪了!你在OnGetAsync里的过滤逻辑本身是对的,但最后完全没用到过滤后的查询结果,直接又从数据库拉取了全量数据,这才导致搜索后页面毫无变化。
看你方法里的最后一行代码:
Movie = await _context.Movie.ToListAsync();
你前面明明已经根据SearchString构建了筛选后的movies查询变量,但这里却直接跳过它,去获取整个Movie表的所有数据了,那搜索条件自然就没生效!
修正后的完整代码
只需要把最后一行改成调用过滤后的movies查询即可:
using Microsoft.AspNetCore.Mvc.Rendering; namespace RazorPagesMovie.Pages.Movies { public class IndexModel : PageModel { private readonly RazorPagesMovie.Data.RazorPagesMovieContext _context; public IndexModel(RazorPagesMovie.Data.RazorPagesMovieContext context) { _context = context; } public IList<Movie> Movie { get;set; } [BindProperty(SupportsGet = true)] public string SearchString { get; set; } public SelectList Genre { get; set; } [BindProperty(SupportsGet = true)] public string MovieGenre { get; set; } public async Task OnGetAsync() { var movies = from m in _context.Movie select m; if (!string.IsNullOrEmpty(SearchString)) { movies = movies.Where(s => s.Title.Contains(SearchString)); } // 改用过滤后的查询获取结果 Movie = await movies.ToListAsync(); } } }
额外优化建议
为了提升用户体验,你可以把搜索改成不区分大小写的匹配,避免用户因输入大小写不同而搜不到结果:
movies = movies.Where(s => s.Title.Contains(SearchString, StringComparison.OrdinalIgnoreCase));
这样修改后,你的搜索功能就能正常返回匹配标题的电影列表了。
内容的提问来源于stack exchange,提问作者amirhesam hashemi
相关产品推荐
相关产品推荐

