用jQuery调用mvc控制器

时间:2011-01-28 16:12:49

标签: jquery asp.net-mvc

我对mvc和jQuery很新...而且对于web开发来说真的很棒。我最近接管了一个由开发人员设计的网站,我们不得不放手,他使用的树视图控件需要更改,原因是我不会进入这里。但基本上我需要能够在树视图中的节点的单击事件上下载资源。我知道如何处理事件,但我无法弄清楚如何通过jquery调用我的mvc控制器。我需要调用以下载资源的控制器函数的路径是/ Resources / DownloadResource。这是代码:

        public ActionResult DownloadResource(string id)
        {
            var resource =
                _resourceService.GetResourceQuery(new Specification<Resource>(r => r.ResourceId == new Guid(id))).FirstOrDefault();

        return new BinaryResult
        {
            FileName = resource.FileName,
            ContentType = string.Format("application/{0}", Path.GetExtension(resource.FileName)).Replace(".", ""),
            IsAttachment = true,
            Data = System.IO.File.ReadAllBytes(resource.FilePath)
        };
    }

我尝试了类似$.post("/Resources/DownloadResourceLink", { id: value });的内容,当我单步执行时,所有内容都获得了正确的值,但没有下载。任何帮助肯定会受到赞赏!

4 个答案:

答案 0 :(得分:3)

要从浏览器触发下载,您需要使用同步方式而不是ajax。

看看这个问题:Downloading a file onto client in ASP.NET MVC application using JQuery

答案 1 :(得分:2)

<script type="text/javascript">

    $(document).keypress(function (e) 
    {
        if (e.which == 13) 
        {
             location.href = '@Url.Action("ActionName", "Controllername")';
        }
    });

</script>

答案 2 :(得分:0)

尝试查看This 基本上你只是将MVC动作地址作为你的ajax函数的url属性。

答案 3 :(得分:0)

问题可能是你如何传递id。根据我的经验,我必须将数据附加到URL (/ action / controller / id route)

$.post("/Resources/DownloadResourceLink/" + value);

如果这不起作用,我会确保调用的content type对于下载类型是正确的。

如果仍然没有这样做,则问题可能是帖子。

我建议你看看$.ajax()。默认值为get,您可能需要下载。我不知道内容类型需要什么(你应该能够从action方法中推断出来),但是你的调用看起来会像这样。

$.ajax({
    url: '/Resources/DownloadResourceLink',
    params: { id }
});