在 asp.net MVC 中使用多过滤器数据表

Posted

技术标签:

【中文标题】在 asp.net MVC 中使用多过滤器数据表【英文标题】:Using multi filter datatables in asp.net MVC 【发布时间】:2019-04-07 19:43:34 【问题描述】:

我正在尝试在 asp.net 的数据表中实现multiple filters,但是当我搜索一个值时,我的表没有更新。

我按照该网站的官方示例进行操作,但没有成功。这是我正在使用的源代码。

视图上的 JS

$('#students tfoot th').each( function () 
                var title = $(this).text();
                if (title !== "") 
                    $(this).html('<input type="text" class="form-control form-control-sm" style="width: 100%" placeholder="' + title + '" />');
                 else 
                    $(this).html('<div class="text-center">-</div>');
                
             );

            tabela.columns().every( function () 
                var that = this;    
                $( 'input', this.header() ).on( 'keydown', function (ev) 
                    if (ev.keyCode == 13)  //only on enter keypress (code 13)
                        that
                            .search( this.value )
                            .draw();
                    
                 );
             );

控制器上的操作

[HttpPost]
        public JsonResult Listar2()
        
            var search = Request.Form.GetValues("search[value]")?[0];

            var list = db.Students;

            if (!string.IsNullOrEmpty(search))
            
                list = list.Where(m => m.name.ToLower().Contains(search.ToLower()) || m.class.ToLower().Contains(search.ToLower()));
            

            var draw = Request.Form.GetValues("draw")?[0];
            var start = Request.Form.GetValues("start")?[0];
            var length = Request.Form.GetValues("length")?[0];

            var width = length != null ? Convert.ToInt32(length) : 0;
            var skip = start != null ? Convert.ToInt32(start) : 0;

            var totalRecords = list.Count();
            var resultFinal = list.Skip(skip).Take(width).ToList();

            return Json(new
            
                data = resultFinal,
                draw,
                recordsFiltered = totalRecords,
                recordsTotal = totalRecords
            );
        

【问题讨论】:

您检查浏览器控制台是否有任何错误?另外,可能有错字tablela.columns 而不是table.columns @MohsinMehmood 是的,控制台没有错误。此外,每次输入搜索时,操作都会收到一个请求,但搜索不会发生,因为值变为空。 我没有看到在输入搜索文本时调用 api 方法的任何代码。您分享的多搜索演示网址只是对数据表列执行客户端搜索。 @MohsinMehmood 表格生成器源代码:gist.github.com/leomarcamargo/dc6032a5fc9c9fc9c6b528462dd539b9 @LeomardeSouza 为什么你的方法是Listar2 而你的ajax 请求方法是Listar?你确定你在服务器上调用了正确的方法吗? 【参考方案1】:

我不知道你想完成什么。官方示例使用 javascript 对已插入 HTML 的数据表进行排序。您应该首先加载所有条目,将它们传递给视图,然后这个脚本应该过滤这些条目

【讨论】:

我不知道你想完成什么官方示例使用JavaScript对已经插入HTML的数据表进行排序。您应该首先加载所有条目,将它们传递给视图,然后此脚本应该过滤这些条目。在上面的 cmets 中,您有一个将数据加载到视图中的示例链接。简单搜索有效,但这种类型的多重搜索无效。

以上是关于在 asp.net MVC 中使用多过滤器数据表的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net MVC在过滤器中使用模型绑定

ASP.NET MVC 控制器通过继承控制器来达到 过滤 并且多了一个IAuthenticationFilter

如何使用 mvc 6、asp.net 5 注册全局过滤器

Asp.Net MVC3 简单入门详解过滤器Filter

ASP.NET MVC 5 过滤器和注入

ASP.NET MVC学习之过滤器篇