asp.net-core - 搜索字符串时剃刀页面上的错误
问题描述
在学习asp .net core中的razor页面时,遇到了一个bug,添加了这个部分来搜索网页上的字符串,但结果没有任何改变。我应该怎么办?请帮我
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 _context.Movie.ToListAsync();
}
}
}
结果: 在此处输入图像描述
我期望的结果: 在此处输入图像描述
解决方案
根据您的描述,我猜您可能没有为您的路线页面设置正确的路线,并且您的 OnGetAsync 方法中的某些逻辑是错误的。
首先,如果你想在你的路径中将 SearchString 绑定为友好的 url,我建议你可以在你的 razor 页面中设置它如下。像下面
@page "{SearchString}"
然后你可以https://localhost:xxxx/Movies/Ghost
用来访问页面,它会自动将 Ghost 绑定到 SearchString。
此外,我发现您在 if 条件之后重新查询了电影。这会使搜索结果不按SearchString。
如下所示:
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()
}else{
Movie = await _context.Movie.ToListAsync();
}
}
更多细节,您可以参考下面的测试演示。
剃须刀页面:
由于我不知道你的电影剃须刀页面化妆,我创建了一个简单的。
@page "{SearchString}"
@model RazorPageRelated.MoviesModel
@{
}
<div class="text-center">
@foreach (var item in Model.Movie)
{
<p>@item.Name</p><br/>
}
</div>
型号代码:
public class MoviesModel : PageModel
{
public List<Movie> Movie { get; set; }
public IList<Movie> Context = new List<Movie>() {
new Movie{ Id=1, Name="When Harry"},
new Movie{ Id=1, Name="Ghost22222"},
new Movie{ Id=1, Name="Ghost11111"},
};
[BindProperty(SupportsGet = true)]
public string SearchString { get; set; }
public void OnGet()
{
if (!string.IsNullOrEmpty(SearchString))
{
Movie = Context.Where(s => s.Name.Contains(SearchString)).ToList();
}
else
{
Movie = Context.ToList();
}
}
}
结果:
推荐阅读
- windows - “超时 - t”与“超时”。有什么实际区别吗?
- javascript - 在滚动时隐藏顶部标题并向上移动主标题
- azure - 如果 Azure COSMOS 容器用完 RU,会发生什么情况?
- c++ - 在 C++ 中将 double 舍入到小数点后两位,但结果与预期不符
- google-maps - 如何在颤动中更改谷歌地图的地图方向
- python - ubuntu18.04LTS(WSL)中损坏的python包
- javascript - 使用 javascript 检查设置复选框的问题
- python - 如何解决 django rest-frame-workd 中的错误请求
- html - 带有“=”符号的文本对齐
- c++ - 使用 boost 库为每个具有相同名称的节点更新 XML 属性值的问题