ajax - 带有 MVC 5 和 Entity Framework 的 jQuery 数据表

标签 ajax asp.net-mvc linq entity-framework datatables

我需要一些关于在我的 Controller 中放入什么的指导,以便我可以将服务器端处理与我的 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);
   }
 }

但是当我使用这样的 LINQ 时我该怎么办?
 public ActionResult Index()
         {
           var activity = db.Activity.Include(a => a.ActivityType);
              return View(activity.ToList());
          }

最佳答案

------------------------------------------- 更新答案 ----------------- --------------
为什么要更新?
这个答案似乎一直受到 SO 用户的关注,我认为每个人都可以从“小”更新中受益。
到目前为止发生了什么变化?DataTables.Mvc一年多前开始。它已更改,现在称为 DataTables.AspNet .但这还不是全部。
当时,目标是帮助基类。问题是你只需要一个 zip 并且应该手动将所有这些合并到你的项目中。此外,模型没有绑定(bind)器,集成真的很无聊。
现在我们有了一个带有 Nuget 包的模块化架构来提供帮助。您可以引用 Core自己打包和实现所有东西,或者您可以获得适当的包(Mvc5AspNetWebApi2 即将推出),带有原生模型绑定(bind)器、单行注册和完整的测试套件。
如何开始?
查看 samples dev 上的文件夹分支(click here)。
不要忘记获取适当的 Nuget 包。您可以找到它们的列表here .
------------------------------------------- 原始答案 ----- --------------
第一件事
您可以将 DataTables 1.9、1.10 与旧 API 或 1.10 与新 API 一起使用。
如果您选择新的 API(仅限 1.10),那么您会在这里和那里错过一些插件,但您可以使用 DataTables.AspNet on GitHub帮助绑定(bind)。
如果没有,您可以查看并更改代码以匹配其他版本的请求变量(稍后将在我的项目中提供支持)。
真正的交易
关键是您必须处理三个项目:

  • 全局过滤/搜索
  • 列过滤/搜索
  • 列排序

  • 给点代码!
    这可能会从哪个版本改变,如果你使用(或不使用)我的绑定(bind)类。考虑到你正在使用它,为了避免在这里处理请求参数,好吗?
    所以,你可以玩这样的东西:
    [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);
    }
    

    关于ajax - 带有 MVC 5 和 Entity Framework 的 jQuery 数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22466041/

    相关文章:

    javascript - 根据第一个 <select> 下拉选项填充第二个 <select> 下拉列表

    javascript - rails-javascript 交互的最佳实践?

    javascript - 如何仅捕获用户更改了值的多行中的那些列?

    c# - 流利的验证集合项不为空/空

    c# - 如何强制我的 lambda 表达式提前求值?修复 lambda 表达式的怪异问题?

    c# - Linq 直方图

    JavaScript 似乎在 AJAX 调用后停止

    java - 使用java servlet的异步文件上传

    asp.net-mvc - ASP.NET MVC 成员资格 - 用户经常注销 - 不知道为什么

    c# - 更好的求和方式