我对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 });
的内容,当我单步执行时,所有内容都获得了正确的值,但没有下载。任何帮助肯定会受到赞赏!
答案 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 }
});