微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。