Экспорт iCal из базы данных - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь выяснить, как можно экспортировать файл 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 голосов
/ 12 февраля 2019

Причина, по которой ничего не загружается, заключается в том, что вы не можете загружать файлы через AJAX.Вместо того, чтобы быть доставленным в файл на диске вашего компьютера, загруженный контент попадает в переменную data в вашей функции «success».

Чтобы решить эту проблему, вместо использования AJAX, заставьте ваш метод действия принимать запросы GET и просто используйте обычную гиперссылку, чтобы связать пользователя с ним:

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

и

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

Вы можете удалить весь свой код jQuery.


Примечание: регистрировать это значение data на консоли (вместо простого оповещения о бессмысленном мусоре) - или использовать сетевые инструменты вашего браузера, чтобы увидеть, чтоесли бы это продолжалось - вы бы увидели это, и вы, возможно, видели бы проблему раньше ... возможно, вам нужно будет сделать больше отладки в будущем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...