2014-08-29 86 views
1

我在ASP.NET MVC4中編寫了一個動作控制器,它創建一個.xls文件並返回該FileStreamresult實例。在客戶端,我有一個錨定標籤,其href屬性設置爲上述動作控制器。我還需要根據哪個控制器查詢數據庫並將數據放入文件中,將一些數據傳遞給控制器​​。這些數據是基於用戶在用戶界面上所做的選擇而動態變化的。所以,我嘗試使用'data-json'屬性傳遞數據,但是參數值在動作方法中作爲null接收。如果我從客戶端使用$ .ajax,瀏覽器不會顯示任何提示來下載文件。如何使用jQuery從錨標記將json數據發送到mvc控制器

**Client side code snippet:** 
$('#mydiv').append('<a id="Download" href="/MyController/Download">Download</a>'); 
$('#mydiv').attr('data-json', userFilters); 

**Server side code snippet:** 
public ActionResult Download(Queryparam filter) 
    { 
     var stream = new MemoryStream(); 
     var streamWriter = new StreamWriter(stream); 
     var line = "test"; //This is just to keep it simple, actual code uses filter o query db 
     streamWriter.WriteLine(line); 
     streamWriter.Flush(); 
     var cd = new System.Net.Mime.ContentDisposition 
     { 
      FileName = "TestData.xls", 
      Inline = false, 
     }; 
     Response.AppendHeader("Content-Disposition", cd.ToString()); 
     stream.Seek(0, SeekOrigin.Begin); 
     return File(stream, "application/vnd.ms-excel"); 
    } 

userFilters具有JSON格式的數據,其結構與輸入參數在action方法中的預期結果相同。如果你有任何意見,請分享,如何做到這一點。

-Thanks

回答

2

首先href="/MyController/Download"不調用GetTestFile方法(它調用的MyControllerControllerDownload方法)。

您可以傳遞查詢字符串中的參數,例如href="/MyController/Download?SomeProperty=SomeValue&AnotherProperty=AnotherValue"(您尚未公佈Queryparam的屬性)。您需要根據控件的值使用jQuery構建正確的href值。

+0

謝謝。我編輯了有問題的服務器端方法的名稱。這是一個錯字。我會嘗試查詢字符串。我唯一的問題是目前有8個屬性組成Queryparam對象,它可能會在未來增加。查詢字符串將變得太長。還有其他的選擇嗎? – user3172614 2014-08-29 07:27:37

+0

是的,查詢字符串的長度有限制。你總是可以使用POST。 – 2014-08-29 07:35:49

+0

我能夠使用表單和隱藏變量成功傳遞數據。點擊錨標籤後,我創建了一個表單併發布到服務器。 – user3172614 2014-09-02 08:03:21

相關問題