【问题标题】:Passing client data to server to create Excel or CSV File将客户端数据传递到服务器以创建 Excel 或 CSV 文件
【发布时间】:2012-01-09 13:05:36
【问题描述】:

我认为我所遇到的问题实际上可能是设计问题而不是技术问题,但无论哪种方式,我似乎在解决这个问题的能力和理解上都遇到了障碍。

我正在创建一个报告网页作为标准 VB.NET Web 应用程序的一部分。该页面是数据驱动的,jquery 调用应用程序本地的 Web 服务来获取在 DOM 中动态创建的元素的值。最终这些动态元素和它们的值都被封装在一个 JSON 对象中,所以客户端的那部分就可以了。

现在,我可以将该 JSON 对象传递给 Web 服务中的方法,该方法从值创建 SQL 数据适配器并查询数据库。我的最终目标是让这个客户端 JSON 数据用于查询数据库并构建一个 excel 文件以发送回给用户,或者无法生成一个 CSV 文件。

我的理解(从使用 PDF 文件生成)只能在 Web 应用程序的服务器端完成,甚至不能从 Web 服务(即我不能让 Web 服务返回字节数组,并让 JavaScript/jQuery 将其作为文件呈现)。

那么,我该怎么做呢?现在我在客户端有我的 JSON 对象,我应该将它发送到哪里,如何以及如何返回我的文件?

我已经阅读了有关将 JSON 存储在隐藏字段中并让服务器获取元素值并从那里开始的信息,或者在回发触发服务器之前使用 AJAX 将 JSON 发送到服务器-side 函数来运行查询并返回数据。

我只需要一点指导,以及一点帮助了解在哪里使用隐藏字段,或者我实际上在使用 pre-postback AJAX 调用做什么。

谢谢。

【问题讨论】:

    标签: jquery asp.net vb.net export-to-excel server-side


    【解决方案1】:

    我过去使用通用处理程序 (ASHX) 页面做过类似的事情。如果您将响应 HttpContext.Response.ContentType 的内容类型设置为 text/csv 并调用

    window.location = "handler.ashx";

    它将在服务器端生成 csv 文件并在用户浏览器中下载。您可以尝试将 JSON 作为 QueryString 传递并在处理程序页面中对其进行解析,以便在服务器端执行您想要的任何操作以生成 CSV。

    示例代码:

    Public Sub ProcessRequest(context As HttpContext)
        context.Response.ContentType = "text/csv"
        context.Response.AddHeader("Content-Disposition", "attachment;filename=test.csv")
        Dim json As String = context.Request.QueryString("json")
        Using sw As New StreamWriter(context.Response.OutputStream)
            sw.WriteLine("Test!")
            sw.Flush()
        End Using
    End Sub
    

    我不确定在客户端设置隐藏字段是否会有所帮助,因为在服务器端读取它可能不会反映您设置的值,因为 ViewState 无法识别更改。不过可能有办法解决这个问题。

    编辑:抱歉阅读了您所说的代码是 VB.Net 的部分。将c#代码改成VB.net

    【讨论】:

    • 我会试一试,谢谢。我想我明白你在说什么,我应该试试。我以前从未使用过 .ashx 页面,但我确信我可以在线找到一些教程材料。在对我的 json 对象进行排序时,我是否需要担心 QueryString 的长度?
    • 限制将与 URL 中查询字符串的任何限制相同。我不确定是否有一个...此外,在查看此内容时,我意识到我错过了一行重要的代码以使其正常工作,那就是context.Response.AddHeader。我编辑了我的帖子以包含它。
    • 感谢您的澄清。我在其中添加了 response.AddHeader 行,当我直接导航到 .ashx 时,我会收到按预期打开/保存 .csv 文件的提示。我已经发布了另一个后续问题link,您可能对此有意见/答案。感谢您提供进一步的意见,并感谢迄今为止的帮助。
    • 后续问题现在是here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多