1

我创建了一个简单的 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 调用控制器但拥有它以便下载文件,因为我描述了当您手动执行它时它是如何做的?

谢谢

4

3 回答 3

1

感谢@heads5150 提供链接。

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

document.location.href = "app/GenerateICS?...";
于 2012-10-31T02:15:45.103 回答
0

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

使用 Javascript/jQuery 下载文件

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

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

于 2012-10-31T02:28:19.347 回答
0

在你的ajax成功中,把这个

  Window.location.href='yourICSfileLink';

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

于 2012-10-31T01:59:43.703 回答