从数据库导出iCal

时间:2019-02-12 14:28:59

标签: c# asp.net-mvc

我试图弄清楚如何从日历中导出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>

1 个答案:

答案 0 :(得分:0)

之所以没有下载,是因为您无法通过AJAX下载文件。下载的内容没有传递到计算机磁盘上的文件中,而是传递到“成功”函数中的data变量中。

要解决此问题,请不要使用AJAX,而要让您的操作方法接受GET请求,而只需使用常规超链接即可将用户链接到该请求:

[HttpGet]
public ActionResult AddToICalendar()
{
 //..etc

<a href="/MeetingCalendar/AddToICalendar" id="icalBtn">Download to iCalendar</a>

您可以删除所有jQuery代码。


data的值记录到控制台中(而不只是警告无意义的垃圾),或者使用浏览器的网络工具查看正在发生的情况,这会让您看到,并且可能会更快地看到问题。 。也许将来您需要做更多的调试。