2014-08-29 98 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

相关问题