【问题标题】:Kendo UI Grid for MVC export to Excel does nothing用于 MVC 导出到 Excel 的 Kendo UI Grid 什么都不做
【发布时间】:2015-04-15 21:19:20
【问题描述】:

我正在为 MVC 4.0 使用 Kendo 网格。我有最新的 DLL 2015.1.318.440。我包括jszip.js。我复制并粘贴了示例中的代码:

          .ToolBar(tools => tools.Excel())
          .Excel(excel => excel.FileName("Enrollments.xlsx"))

它什么都不做。按钮改变颜色,就是这样。当我尝试它时,我没有收到任何错误。它只是没有做任何事情。我没有使用代理服务器。我在 Chrome 最新版本中运行它。

网格

@(Html.Kendo().Grid<Trawick.Agents.Models.EnrollmentPolicy>()
.Name("grid")
    .ToolBar(tools => tools.Excel())              
    .Excel(excel => excel
   .FileName("Enrollments.xlsx")
       .Filterable(true)
       .ProxyURL(Url.Action("Excel_Export_Save", "Enrollments"))
     )              
     .Columns(columns =>
      {
       columns.Bound(p => p.enrollment_date)
          })
     .Pageable()
     .Groupable()
     .Sortable()
     .DataSource(dataSource => dataSource
     .Ajax()
     .PageSize(20)
     .Read(read => read.Action("Enrollments_Read", "Enrollments")))
)

控制器

    [HttpPost]
    public ActionResult Excel_Export_Save(string contentType, string base64, string fileName)
    {
        var fileContents = Convert.FromBase64String(base64);

        return File(fileContents, contentType, fileName);
    }
    public ActionResult Enrollments_Read([DataSourceRequest]DataSourceRequest request, int? id)
    {
        string sql = "SELECT * FROM EnrollmentPolicy ";
        sql += SearchParams.SetSearch(this);
        return Json(GetEnrollments(sql).ToDataSourceResult(request));
    }

包含 jszip 的捆绑文件

bundles.Add(new ScriptBundle("~/js/kendo")
     .Include("~/Scripts/jszip.js")
     .Include("~/Scripts/kendo.all.min.js")
     .Include("~/Scripts/kendo.aspnetmvc.min.js"));

【问题讨论】:

  • 这个问题很难回答。发布更多代码或提供更多信息。
  • 贴出你使用的全部代码
  • 你把这些代码行放在哪里了?
  • 大多数浏览器不需要_Save 方法,它仅适用于那些不允许从javascript保存的浏览器。调试您的 javascript 代码(例如,使用浏览器的 F12 工具)以查找任何阻止您的代码工作的 javascript 错误。还可以尝试使用 Fiddler 或浏览器的网络捕获功能来查看对数据的 Ajax 调用是否成功
  • 两种方法我都试过了。 F12 不显示任何 js 错误;但是,当单击按钮时,Fiddler 根本不会显示该操作的任何活动。嗯...

标签: asp.net-mvc excel export-to-excel kendo-asp.net-mvc


【解决方案1】:
        bundles.Add(new ScriptBundle("~/js/kendo")
            .Include("~/Scripts/kendo.all.min.js")
            .Include("~/Scripts/kendo.aspnetmvc.min.js")
            .Include("~/Scripts/jszip.js"));

这是问题所在。jszip 必须包含在剑道脚本之后(这与文档所说的相反)。

【讨论】:

    【解决方案2】:

    我的问题与数量有关 - 记录数量较少,大批量则不行。我目前的解决方法是设置 AllPages(false) 然后它只会导出一个过滤列表。见http://www.telerik.com/forums/excel-export-not-working-with-more-than-a-thousand-records

    【讨论】:

      【解决方案3】:

      根据文档,我认为您需要这样做。

      控制器

      [HttpPost]
          public ActionResult Excel_Export_Save(string contentType, string base64, string fileName)
          {
              var fileContents = Convert.FromBase64String(base64);
      
              return File(fileContents, contentType, fileName);
          }
      

      cshtml

       .Excel(excel => excel
          .FileName("Enrollments.xlsx")
          .Filterable(true) //omit this if you don't need filtering in excel
          .ProxyURL(Url.Action("Excel_Export_Save", "Grid")) // for browsers not supporting saving file from JS
       )
      

      请参阅演示代码here 和文档,请通过此link

      【讨论】:

      • 这不是必需的。这是 fallback 代码,以防从 Javascript 保存失败。甚至在 cshtml 代码的 cmets 中也提到过。只有当浏览器实际上无法从 Javascript 中保存时,这才会有所帮助。虽然所有现代浏览器都支持这一点
      【解决方案4】:

      我刚才遇到了同样的问题 - 导出按钮什么也没做。我运行的是 2014 年第三季度版本的 Kendo。

      升级到最新的 DLL 并更新到最新的 JavaScript 库和样式为我解决了这个问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 1970-01-01
        • 2016-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多