2012-01-09 125 views
1

我認爲我所擁有的可能實際上是一個設計問題而不是技術問題,但是無論哪種方式,我的能力和理解似乎都受到了打擊克服這個問題。將客戶端數據傳遞到服務器以創建Excel或CSV文件

我正在創建一個報告網頁作爲標準VB.NET Web應用程序的一部分。該頁面是數據驅動的,jquery調用本地應用程序的Web服務來獲取在DOM中動態創建的元素的值。最終,這些動態元素和它們的值都包裝在一個JSON對象中,這樣客戶端的一部分就可以了。

現在,我可以將該JSON對象傳遞給Web服務中的一個方法,該方法通過值創建SQL數據適配器並查詢數據庫。我的最終目標是讓這個客戶端的JSON數據被用來查詢數據庫並構建一個excel文件發回給用戶,或者失敗一個CSV文件。

這是我的理解(從PDF文件生成工作),這種類型的功能只能在Web應用程序的服務器端,甚至不從Web服務(即我不能讓Web服務返回一個字節數組,並將JavaScript/jQuery作爲文件存在)。

那麼,我該如何去做呢?現在我在客戶端有我的JSON對象,我應該在哪裏發送它,如何以及如何返回我的文件?

我讀過關於將JSON存儲在隱藏字段中並讓服務器獲取元素值並從那裏開始,或者使用AJAX將JSON發送到服務器,然後再回發服務器端函數來運行查詢並返回數據。

我只需要一點指導,並且有助於理解隱藏字段的使用位置,或者我實際上使用回發前AJAX調用的方式。

謝謝。

回答

2

我在過去使用通用處理程序(ASHX)頁面做了類似於此的事情。如果設置了響應的內容類型HttpContext.Response.ContentTypetext/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

+0

我會給你一個鏡頭,謝謝。我想我明白你在說什麼我應該嘗試。我從來沒有使用.ashx頁面,但我確定我可以在線找到一些教程材料。在擴展我的json對象時,我需要擔心QueryString的長度嗎? – 2012-01-09 19:55:28

+0

該限制將與URL中任何查詢字符串的限制相同。我不確定是否有一個雖然...此外,當審查這個我意識到我錯過了一個重要的代碼行,爲了這個工作,這就是'context.Response.AddHeader'。我編輯了我的帖子以包含它。 – 2012-01-10 13:08:20

+0

感謝您的澄清。我將response.AddHeader行添加到了當我直接導航到.ashx的時候,我得到了一個按照預期打開/保存.csv文件的提示。 我已經發布了另一個後續問題[鏈接](http://stackoverflow.com/questions/8806163/getting-csv-from-ashx-after-jquery-post),您可能有意見/答案。我希望得到一些進一步的意見,並感謝迄今爲止的幫助。 – 2012-01-10 15:53:56

相關問題