如何使用jQuery从锚标记向mvc控制器发送json数据

时间:2014-08-29 02:42:27

标签: jquery asp.net-mvc-4 download

我正在ASP.NET MVC4中编写一个动作控制器,它创建一个.xls文件并返回该FileStreamresult实例。在客户端,我有一个锚点标记,其href属性设置为上述动作控制器。我还需要根据查询数据库的控制器将一些数据传递给控制器​​,并将数据放入文件中。该数据基于用户在UI上做出的选择是动态的。所以,我尝试使用' data-json'传递数据。属性,但参数值在action方法中作为null接收。如果我在客户端使用$ .ajax,浏览器不会显示任何下载文件的提示。

**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

1 个答案:

答案 0 :(得分:2)

首先href="/MyController/Download"不会调用GetTestFile方法(它调用Download的{​​{1}}方法)。

您可以在查询字符串中传递参数,例如MyControllerController(您尚未发布href="/MyController/Download?SomeProperty=SomeValue&AnotherProperty=AnotherValue"的属性)。您需要根据控件的值使用jQuery构造正确的Queryparam值。

相关问题