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