使用Javascript Ajax调用来调用MVC动作来下载对象

时间:2012-10-31 01:36:56

标签: javascript jquery ajax asp.net-mvc

我创建了一个简单的MVC控制器动作,它创建了一个简单的ics(日历)项,并通过控制器动作将其发回。如下:

    public object GenerateICS(int myID)
    {
        iCalendar iCal = new iCalendar();            
         Event evt = iCal.Create<Event>();
        Uri eventLink = new Uri("http://localhost:");
        evt.IsAllDay = false;

       evt.Start = new iCalDateTime(DateTime.Now);
       evt.End = new iCalDateTime(DateTime.Now.AddDays(3));

       evt.Summary = "MySummary";
       evt.Url = eventLink;
       evt.Description = "You know it";         

      Response.ContentType = "text/v-calendar";
      Response.AddHeader("content-disposition", "attachment; filename=" + "Event" + ".ics");
      iCalendarSerializer serializer = new iCalendarSerializer(iCal);
      string result = serializer.SerializeToString(iCal);
      Response.Write(result);          
        return Response;
    }

所以在网站运行时,如果我去:

http://localhost:21312/GenerateICS?myID=1 

这将生成ics文件服务器端并将其传递回客户端,因此您会收到“您想从localhost打开blah.ics吗?”。这完全是我想要的。

我的问题是如何通过从javascript执行它来实现完全相同。我有以下ajax调用:

 $.ajax({
                url: "app/GenerateICS",
                data: { myID: 1 },
                success: function (data) {
                    //call is successfully completed and we got result in data
                    alert(data);
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    //some errror, some show err msg to user and log the error  
                    alert(xhr.responseText);

                }
            });

这完美地执行了mvc控制器。但它返回成功函数的ics​​响应。如何使用ajax调用控制器,但是如果我在手动操作时描述文件是如何下载文件的那样?

由于

3 个答案:

答案 0 :(得分:1)

感谢@ heads5150的链接。

这只是设置浏览器位置的事实:

document.location.href = "app/GenerateICS?...";

答案 1 :(得分:0)

在你的ajax成功中,把这个

  Window.location.href='yourICSfileLink';

这将重定向浏览器成功创建文件的ajax然后打开或在这种情况下下载ics文件,请注意每次ajax成功时都会发生

答案 2 :(得分:0)

我只是想从js下载并且答案通常与创建iframe并完成它有关。甚至有一些jquery插件可以这样做。一些例如:

Download File Using Javascript/jQuery

http://johnculviner.com/category/jQuery-File-Download.aspx

如果你谷歌它,你可以找到更多关于这个主题。