【问题标题】:How to send json data to mvc controller from anchor tag using jQuery如何使用 jQuery 从锚标记向 mvc 控制器发送 json 数据
【发布时间】:2014-08-29 02:42:26
【问题描述】:

我正在 ASP.NET MVC4 中编写一个动作控制器,它创建一个 .xls 文件并返回该 FileStreamresult 实例。在客户端,我有一个带有 href 属性的锚标记设置为上述动作控制器。我还需要根据哪个控制器查询数据库并将数据放入文件中,将一些数据传递给控制器​​。该数据是动态的,基于用户在 UI 上所做的选择。因此,我尝试使用“data-json”属性传递数据,但参数值在操作方法中被接收为 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 方法中的输入参数所期望的结构相同。如果您对如何实现这一点有任何意见,请分享。

-谢谢

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。我编辑了有问题的服务器端方法的名称。那是一个错字。我将尝试使用查询字符串。我唯一的问题是目前有 8 个属性构成 Queryparam 对象,并且将来可能会增加。查询字符串会变得太长。还有其他选择吗?
    • 是的,查询字符串的长度有限制。你总是可以使用 POST。
    • 我能够使用表单和隐藏变量成功传递数据。单击锚标记后,我创建了一个表单并发布到服务器。
    猜你喜欢
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多