ASP .Net MVC Web 应用程序搜索过滤器不起作用?

问题描述

我正在使用 Entity Framework Core 开发 ASP .Net Core Web 应用程序。

我有一张表格,想根据列进行过滤。现在我只是从userName过滤开始,然后我将扩展其他列的代码

首先,我有一个过滤器模型。

public class HistoryFilterModel
{
    public string UserName { get; set; }
   // public string UserSays { get; set; }
   // public DateTime CreateDateFrom { get; set; }
   // public DateTime CreateDateto { get; set; }
}

我有 FilterService

public class HistoryFilteRSService
{
    private MainContext _context;

 
    public HistoryFilteRSService(MainContext context)
    {
        _context = context;
    }

    public IQueryable<History> GetHistories(HistoryFilterModel filterModel)
    {
        var result = _context.History.AsQueryable();
        if( filterModel != null)
        {
            if (!string.IsNullOrEmpty(filterModel.UserName))
                result = result.Where(x => x.UserName.Contains(filterModel.UserName)); 

            //if (!string.IsNullOrEmpty(filterModel.UserSays))
            //    result = result.Where(x => x.UserSays.Contains(filterModel.UserSays)); 

            //if (filterModel.CreateDateFrom.Date != null)
            //    result = result.Where(x => x.CreateDate.Date >= filterModel.CreateDateFrom); 

            //if (filterModel.CreateDateto.Date != null)
            //    result = result.Where(x => x.CreateDate.Date <= filterModel.CreateDateto); 
        }

        return result;
    }
}

之后,我开始研究 HistoryController 的 Index 方法

public async Task<IActionResult> Index(HistoryFilterModel filterModel,int page = 1 )
    {
        var pageSize = 50;
        var history = _context.History
          .OrderByDescending(m => m.CreateDate);

        var pagingHistory = history.Skip((page - 1) * pageSize).Take(pageSize);


        var totalCount = history.Count();
        var totalPages = Math.Ceiling((decimal)totalCount / pageSize);
        ViewBag.TotalPages = totalPages;

        var filter = new HistoryFilteRSService(_context);
        var model = filter.GetHistories(filterModel);

       

        if (! string.IsNullOrEmpty(filterModel.UserName))
        {
            return View(model.ToListAsync());
            
        }
        else
        {
            return View(await history.ToListAsync());
        }

    }

我在索引视图上添加一个搜索文本框

 @using (Html.BeginForm("Index","HistoryController",FormMethod.Get))
            {
            <p>
                User Name: @Html.TextBox("filterModel.UserName")
                <input type="submit" value="Filtrele" class="btn btn-primary" />

            </p>
            }

当我搜索用户名时,例如 Alex。 (History表中有数据) 我有一个错误

未找到以下网址的网页 http://localhost:XXXX/HistoryController?filterModel.UserName=Alex

我该如何解决这个问题?或者您可以建议任何过滤表格数据的方法,例如像 Excel 表格列过滤那样工作吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)