首页 > 解决方案 > 搜索字符串时剃刀页面上的错误

问题描述

在学习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();
    }

    
    
}
}

结果: 在此处输入图像描述

我期望的结果: 在此处输入图像描述

标签: asp.net-corewebrazor-pages

解决方案


根据您的描述,我猜您可能没有为您的路线页面设置正确的路线,并且您的 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();
        }
      
    }
}

结果:

在此处输入图像描述


推荐阅读