【问题标题】:How to add parameters to a @Url.Action() call from JavaScript on click如何在单击时从 JavaScript 向 @Url.Action() 调用添加参数
【发布时间】:2011-03-16 21:47:40
【问题描述】:

我有一个链接,当单击该链接时,需要使用某些数据调用控制器操作,这些数据必须通过 JavaScript 检索。该操作将返回一个 FileStreamResult。

我查看了@Url.Action,但我不知道如何(或什至)我可以传递必须通过 JS 检索的值字典内容。

然后我使用了来自点击处理程序的 $.post。我遇到的问题是我不确定我的成功要做什么:function() 将文件流结果返回给用户。或者即使我可以。

所以任何关于你如何做这样的事情的帮助都会很棒..

【问题讨论】:

    标签: javascript jquery asp.net-mvc asp.net-mvc-3 razor


    【解决方案1】:

    然后我使用了来自点击处理程序的 $.post。我遇到的问题是我不确定我的成功要做什么:function() 将文件流结果返回给用户。或者即使我可以。

    没错。在 javascritpt 中接收到的字节不能做太多事情:显然你不能将它保存在客户端计算机上,也不能将它传递给客户端上的某个外部程序。所以不要调用应该使用 AJAX 返回文件的操作。对于这些操作,您应该使用普通链接:

    @Html.ActionLink("download file", "download", new { id = 123 })
    

    并让用户决定如何处理该文件。您可以使用Content-Disposition 标头并将其设置为inlineattachment,具体取决于您是希望使用浏览器内的默认关联程序打开文件还是使用“保存文件”对话框提示用户。


    更新:

    看来我误解了这个问题。如果您想将参数附加到现有链接,您可以在 javascript 中订阅 click 事件并通过将必要的参数附加到查询字符串来修改 href:

    $(function() {
        $('#mylink').click(function() {
            var someValue = 'value of parameter';
            $(this).attr('href', this.href + '?paramName=' + encodeURIComponent(someValue));
            return true;
        });
    });
    

    【讨论】:

    • 显然你错过了我提到的部分,我无法弄清楚如何拥有一个正常的链接,但仍然通过 Javascript 为通话收集一些信息?
    • @ShaneC,是的,我确实错过了那部分。好吧,这很简单,只需订阅链接的点击事件并将它们作为查询字符串参数附加到当前 href 并返回 true 以允许默认行为。
    • @ShaneC,我更新了我的答案,用一个具体的例子来说明我的评论。
    • 谢谢。我已经更新了实际标题,以便对其他人更友好的搜索,因为您的答案对于一个问题非常优雅,我敢肯定在新手中很常见:)
    • @ShaneC,如果这篇文章帮助您解决了问题,也许您可​​以将其标记为答案?
    【解决方案2】:

    我不会发布帖子,而是在链接的单击处理程序上关联一个 JQuery,该处理程序将调用控制器操作。这是假设 action 方法返回一个 FileStreamResult 并设置正确的内容类型,以便浏览器解释结果并相应地呈现它。

    使用您的方法,您必须在帖子的 onSuccessHandler 中解释如何呈现生成的流。

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      • 2015-06-05
      • 1970-01-01
      • 2018-12-01
      • 2015-12-27
      • 1970-01-01
      相关资源
      最近更新 更多