带有MVC 5和实体框架的jQuery Datatable

Kod*_*ode 8 linq ajax asp.net-mvc entity-framework datatables

我需要一些关于将什么放入我的控制器的指导,以便我可以使用我的jQuery数据表进行服务器端处理.我正在使用MVC 5和Entity Framework.

以下示例:http://datatablesmvc.codeplex.com/documentation说明以下内容:

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);
   }
 }
Run Code Online (Sandbox Code Playgroud)

但是当我使用这样的LINQ时我该怎么办?

 public ActionResult Index()
         {
           var activity = db.Activity.Include(a => a.ActivityType);
              return View(activity.ToList());
          }
Run Code Online (Sandbox Code Playgroud)

And*_*tos 19

-------------------------------更新的答案----------------- --------------

为何更新?

这个答案似乎一直受到SO用户的关注,我认为每个人都可以从"小"更新中受益.

到目前为止有什么变化?

DataTables.Mvc一年多前开始.它已经改变了,现在它被称为DataTables.AspNet.但那还不是全部.

那时,目标是帮助基类.问题是你只需要一个zip,并且应该手动将所有这些合并到你的项目中.此外,没有模型的粘合剂和集成真的很无聊.

现在我们有一个模块化架构,Nuget包可以提供帮助.您可以参考Core包装和实施一切自己,或者你可以得到apropriate包(Mvc5AspNet,WebApi2被正在添加很快),与原生模型粘合剂,一种网上报名和一个完整的测试套件.

如何开始?

查看分支上的samples文件夹dev(单击此处).不要忘记获得适当的Nuget包.你可以在这里找到它们的列表.

-------------------------------原始答案----------------- --------------

首先要做的事情

您可以将DataTables 1.9,1.10与旧API一起使用,也可以将1.10与新API一起使用.

如果您选择新的API(仅限1.10),那么您可能会错过一些插件,但您可以在GitHub上使用DataTables.AspNet来帮助进行绑定.

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

真正的交易

重点是你必须处理三个项目:

  1. 全局过滤/搜索
  2. 列过滤/搜索
  3. 列排序

给我一些代码!

如果您使用(或不使用)我的绑定类,那么这可能会从哪个版本更改.考虑到你正在使用它,为了避免在这里处理请求参数,好吗?

所以,你可以玩这样的东西:

[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);
}
Run Code Online (Sandbox Code Playgroud)

  • 我在https://datatables.net的博客上看到了这个,看起来非常棒.你有动态linq的例子吗? (2认同)