Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 使用MVC5和实体框架的jQuery数据表_Ajax_Asp.net Mvc_Linq_Entity Framework_Datatables - Fatal编程技术网

Ajax 使用MVC5和实体框架的jQuery数据表

Ajax 使用MVC5和实体框架的jQuery数据表,ajax,asp.net-mvc,linq,entity-framework,datatables,Ajax,Asp.net Mvc,Linq,Entity Framework,Datatables,我需要一些关于在控制器中放置什么的指导,这样我就可以对jQuery数据表使用服务器端处理。我正在使用MVC5和实体框架 位于的示例说明了以下内容: public class HomeController : Controller { [HttpPost] public ActionResult GetDataTables(DataTable dataTable) { List<List<string>> table = new List<List<str

我需要一些关于在控制器中放置什么的指导,这样我就可以对jQuery数据表使用服务器端处理。我正在使用MVC5和实体框架

位于的示例说明了以下内容:

public class HomeController : Controller {
[HttpPost]
 public ActionResult GetDataTables(DataTable dataTable) {
  List<List<string>> table = new List<List<string>>();
  //Do something with dataTable and fill table    
  return new DataTableResult(dataTable, table.Count, table.Count, table);
   }
 }
-------------------------------最新答案------------------------------- 为什么要更新? 这个答案似乎一直受到用户的关注,所以我认为每个人都可以从一个“小”更新中受益

到目前为止发生了什么变化?
DataTables.Mvc
始于一年多前。它已更改,现在称为
DataTables.AspNet
。但这还不是全部

当时,目标是帮助基类。问题是,您刚刚得到一个zip文件,应该手动将所有这些文件合并到您的项目中。而且,没有用于模型的活页夹,集成非常枯燥

现在,我们有了一个模块化的体系结构和Nuget软件包来提供帮助。您可以参考
Core
包并自己实现所有功能,也可以使用本机模型绑定、一行注册和完整测试套件获得合适的包(
Mvc5
AspNet
WebApi2
即将推出)

如何开始? 查看
dev
branch()上的
samples
文件夹。 别忘了带上合适的Nuget软件包。你可以找到它们的列表

-------------------------------原始答案------------------------------- 第一件事 您可以将DataTables 1.9、1.10与旧API一起使用,也可以将DataTables 1.10与新API一起使用

如果您选择了新的API(仅1.10版),您将错过一些插件,但您可以使用它来帮助绑定

如果没有,您可以查看并更改代码以匹配其他版本的请求变量(稍后将在我的项目中提供支持)

真正的交易 重点是,您必须处理三项:

  • 全局筛选/搜索
  • 列筛选/搜索
  • 列排序
  • 给我一些代码! 如果您使用(或不使用)我的绑定类,那么从哪个版本开始,这可能会发生变化。考虑到你正在使用它,为了避免在这里处理请求参数,好吗? 所以,你可以玩这样的游戏:

    [HttpPost]
    public ActionResult Index([ModelBinder(typeof(DataTablesBinder))] IDataTablesRequest requestParameters)
    {
        var totalCount = myDbContext.Set<Something>().Count();
        var filteredDataSet = myDbContext.Set<Something>().Where(_s => _s.ToLower().Contains(requestParameters.Search.Value));
    
        foreach(var column in requestParameters.Columns.GetFilteredColumns())
        {
            // Apply individual filters to each column.
            // You can try Dynamic Linq to help here or you can use if statements.
    
            // DynamicLinq will be slower but code will be cleaner.
        }
    
        var isSorted = false;
        IOrderedEnumerable<Something> ordered = null;
        foreach(var column in requestParameters.Columns.GetSortedColumns())
        {
            // If you choose to use Dynamic Linq, you can apply all sorting at once.
            // If not, you have to apply each sort manually, as follows.
    
            if (!isSorted)
            {
                // Apply first sort.
                if (column.SortDirection == Column.SortDirection.Ascendant)
                    ordered.OrderBy(...);
                else
                    ordered.OrderByDescending(...);
    
                isSorted = true;
            }
            else
            {
                if (column.SortDirection == Column.SortDirection.Ascendant)
                    ordered.ThanBy(...);
                else
                    ordered.ThanByDescending(...);
            }
        }
    
        var pagedData = ordered.Skip(requestParameters.Start).Take(requestParameters.Length);
    
        var dataTablesResult = new DataTablesResult(
            requestParameters.Draw,
            pagedData,
            filteredDataSet.Count(),
            totalCount
        );
    
        return View(dataTablesResult);
    }
    
    [HttpPost]
    公共操作结果索引([ModelBinder(typeof(DataTableBinder))]IDataTablesRequestParameters)
    {
    var totalCount=myDbContext.Set().Count();
    var filteredataset=myDbContext.Set()。其中(_s=>_s.ToLower().Contains(requestParameters.Search.Value));
    foreach(requestParameters.Columns.GetFilteredColumns()中的var列)
    {
    //对每列应用单个筛选器。
    //您可以尝试使用动态Linq来提供帮助,也可以使用if语句。
    //DynamicLinq会更慢,但代码会更干净。
    }
    var isSorted=false;
    IORDerenumerable ordered=null;
    foreach(requestParameters.Columns.GetSortedColumns()中的var列)
    {
    //如果选择使用动态Linq,则可以一次应用所有排序。
    //如果没有,则必须手动应用每个排序,如下所示。
    如果(!isSorted)
    {
    //应用第一类。
    if(column.SortDirection==column.SortDirection.Ascendant)
    订购人(…);
    其他的
    ordered.OrderByDescending(…);
    isSorted=true;
    }
    其他的
    {
    if(column.SortDirection==column.SortDirection.Ascendant)
    命令。ThanBy(…);
    其他的
    有序。通过降序(…);
    }
    }
    var pagedData=ordered.Skip(requestParameters.Start).Take(requestParameters.Length);
    var dataTablesResult=新的dataTablesResult(
    请求参数。绘制,
    pagedData,
    filteredDataSet.Count(),
    总数
    );
    返回视图(dataTablesResult);
    }
    
    使用

    什么是EFDatatable? EFDatatable是使用Jquery Datatable创建网格的助手,并提供了一个扩展,用于从实体框架上下文中检索数据。可以将许多datatable.js功能与Html帮助器一起使用。它提供服务器端或客户端选项。还有更多:

    @(Html.EF().Datatable())
    .姓名(“PersonGrid”)
    .Columns(cols=>
    {
    cols.Field(a=>a.Id).Visible(false);
    cols.Field(a=>a.Name).Title(“名字”).Class(“文本危险”);
    cols.Field(a=>a.Age).Title(“Age”)。可搜索(false);
    cols.字段(a=>a.BirthDate).Title(“BirthDate”).Format(“DD-MMM-Y”);
    命令(a=>a.Id,“onClick”,文本:“Click”).Title(“”);
    })
    .Filters(filter=>
    {
    filter.Add(a=>a.Id).GreaterThanOrEqual(1);
    })
    .URL(URL.Action(“GetDataResult”),“POST”)
    .ServerSide(true)
    .Render()
    )
    
    使用“ToDataResult(request)”扩展功能,可以非常简单地通过服务器端分页获取数据

    公共JsonResult GetDataResult(DataRequest请求) { DataResult=context.People.ToDataResult(请求); 返回Json(结果); } 在哪里可以买到? 从软件包管理器控制台安装:

    PM> Install-Package EFDatatable
    
    然后将Javascript和CSS文件或链接添加到项目中

    
    
    我在的博客上看到了这个,看起来真的很不错。你有动态linq的例子吗?对不起,还没有。我将在今天/明天完成这项工作,并尽快提供。但是,应该非常简单:创建某种帮助程序/扩展来接收列集合,并返回一个带有筛选器或sort的字符串,然后将其传递给Dynamic Linq。只是对它进行了更多的处理,我认为它不会与我所采用的方法一起工作,因为IModelBinder接口不会与Apicontroller一起工作。我不认为你有一个替代/补丁的建议?好的想法,为供应商在这里,而不是seprate项目
    PM> Install-Package EFDatatable