【问题标题】:JQuery Datatable plugin data binding in ASP.NET MVCASP.NET MVC 中的 JQuery Datatable 插件数据绑定
【发布时间】:2012-07-05 14:42:25
【问题描述】:

我正在尝试在 ASP.NET MVC 应用程序中使用 JQuery Datatable 插件。但是,虽然我的控制器将 JSON 数据返回给插件,但表格显示了 Loading... 消息并卡在那里。

这是我的控制器,

public ActionResult GetCompanies(jQueryDataTableParamModel param)
{
   return Json(new
   {
       sEcho = param.sEcho,
       iTotalRecords = 97,
       iTotalDisplayRecords = 3,
       aaData = new List<string[]>() {
           new string[] {"1", "a1", "a2", "a3"},
           new string[] {"2", "b1", "b2", "b3"},
           new string[] {"3", "c1", "c2", "c3"}
           }
       }, JsonRequestBehavior.AllowGet);     
}

这是datatable插件的初始化。

$('#companyDataTable').dataTable({
    bProcessing: true,
    sAjaxSource: '@Url.Action("GetCompanies", "Company")'
});

这是我的表格截图。

这是从Company/GetCompanies返回给插件的JSON数据

{ "sEcho":null,
  "iTotalRecords":97,
  "iTotalDisplayRecords":3,
  "aaData":[ ["1","a1","a2","a3"],
             ["2","b1","b2","b3"],
             ["3","c1","c2","c3"]
           ]
}

jQuerDataTableParamModel 是一个显示为here 的类。我也试过这个question 的答案,但没有一个对我有用。

编辑:

这就是插件请求的样子。

有什么想法吗?

谢谢

【问题讨论】:

  • 您的param 模型由于某种原因未初始化。尝试使用开发者工具在浏览器中检查请求参数。另外,尝试更改参数名称 - 也许您还有另一个名为 param 的请求参数。
  • 将我的来源更改为 sAjaxSource: 'GetCompanies'。现在它正在工作。你知道这可能是什么原因吗?顺便说一句,谢谢你指导我。
  • 没问题。只是'GetCompanies'?没有@Url.Action 电话?如果您当前在/Company 页面上,那应该可以工作...然后应该请求/Company/GetCompanies。不知道为什么它不适用于@Url.Action

标签: jquery asp.net-mvc json datatables


【解决方案1】:

您需要返回与您的请求相同的 sEcho 值。在您的响应中,“sEcho”值为空,因此 DataTables 无法将请求与响应连接起来。

来自数据表documentation

sEcho 从客户端发送的未更改的 sEcho 副本。这个参数会随着每次抽奖而改变(它基本上是一个抽奖次数) - 所以实现这一点很重要。请注意,它强烈 出于安全原因,建议您将此参数“强制转换”为 整数,以防止跨站脚本 (XSS) 攻击。

【讨论】:

  • 感谢您的回答。我正在使用 param.sEcho 返回 sEcho 值,但控制器将其接收为 null,这就是为什么它在响应中为 null。你知道为什么它是 null 吗?
  • @emrenevayeshirazi 这很奇怪......您的请求看起来如何?是否发送 sEcho 参数?
  • 据我所知,您没有明确提出请求。插件初始化代码的 URL 为“Company/GetCompanies”,它在初始化时向该操作方法发出第一个请求。我错过了什么吗?
  • @emrenevayeshirazi 是的,但是您可以使用浏览器开发工具(例如 Firefox 中的 Firebug)查看请求和响应。
  • 另外,您可以在操作方法中设置断点并检查那里的值。
【解决方案2】:

对于 OP 来说可能为时已晚,但我猜您使用的是 1.10 版的 DataTables?

传入的参数与早期版本完全不同,这就是为什么该教程中的自定义对象 (jQueryDataTableParamMode) 没有任何值绑定到它的属性。

目前,1.10 版传入变量的最新文档是enter link description here

您可以看到这里谈到了一个名为“draw”的变量,它取代了旧的“sEcho”

1.9 或更早版本的相同文档页面是here

另外here is a comparison list 用于从 1.9 升级到 1.10

【讨论】:

    猜你喜欢
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    • 1970-01-01
    • 2019-06-02
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多