我试图弄清楚如何从日历中导出iCal文件。我无法使用它,它也无法开始“下载”文件。
现在,我只是尝试召开一个会议,但是稍后我将进行一个for循环,以将数据库中的所有会议都保存到iCal文件中,但是我只想检查它是否有效,但是不起作用。
下面是我在控制器中的方法,后来是jQuery调用该方法。
[HttpPost]
public ActionResult AddToICalendar()
{
var ctx = new OruBloggenDbContext();
var meetings = ctx.Meetings.FirstOrDefault(u => u.MeetingID == 1);
var icalStringbuilder = new StringBuilder();
icalStringbuilder.AppendLine("BEGIN:VCALENDAR");
icalStringbuilder.AppendLine("PRODID:-//MyTestProject//EN");
icalStringbuilder.AppendLine("VERSION:2.0");
icalStringbuilder.AppendLine("BEGIN:VEVENT");
icalStringbuilder.AppendLine("SUMMARY;LANGUAGE=en-us:" + meetings.MeetingTitle);
icalStringbuilder.AppendLine("CLASS:PUBLIC");
icalStringbuilder.AppendLine(string.Format("CREATED:{0:yyyyMMddTHHmmssZ}", DateTime.UtcNow));
icalStringbuilder.AppendLine("DESCRIPTION:" + meetings.MeetingDesc);
icalStringbuilder.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", meetings.MeetingStartDate));
icalStringbuilder.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", meetings.MeetingEndDate));
icalStringbuilder.AppendLine("SEQUENCE:0");
icalStringbuilder.AppendLine("UID:" + Guid.NewGuid());
icalStringbuilder.AppendLine("END:VEVENT");
icalStringbuilder.AppendLine("END:VCALENDAR");
var bytes = Encoding.UTF8.GetBytes(icalStringbuilder.ToString());
return this.File(bytes, "text/calendar", "ical.ics");
}
Javascript:
<script>
$(function () {
$(document)
.on("click", "#icalBtn", function () {
exportiCal();
});
function exportiCal() {
$.ajax({
url: '/MeetingCalendar/AddToICalendar',
type: "POST",
//data: { downloadFileName = "thisEvent.ics" },
success: function (data) {
alert("hejejje");
}
});
}
});
</script>
答案 0 :(得分:0)
之所以没有下载,是因为您无法通过AJAX下载文件。下载的内容没有传递到计算机磁盘上的文件中,而是传递到“成功”函数中的data
变量中。
要解决此问题,请不要使用AJAX,而要让您的操作方法接受GET请求,而只需使用常规超链接即可将用户链接到该请求:
[HttpGet]
public ActionResult AddToICalendar()
{
//..etc
和
<a href="/MeetingCalendar/AddToICalendar" id="icalBtn">Download to iCalendar</a>
您可以删除所有jQuery代码。
将data
的值记录到控制台中(而不只是警告无意义的垃圾),或者使用浏览器的网络工具查看正在发生的情况,这会让您看到,并且可能会更快地看到问题。 。也许将来您需要做更多的调试。