Wednesday, November 21, 2012

MVC C# - Create iCal calendar ICS Feed using DDay.ical library


Following Code download the iCal file, Host this application in any URL and refer it as Feed in any Calendar application (Google calendar, Microsoft Calendar etc.,)


Requirements:
DDay.iCal library dll
MVC3 .Net 4 framework

public ActionResult iCalendar(string DownloadFileName)
{
DDay.iCal.iCalendar iCal = new DDay.iCal.iCalendar();

// Create the event, and add it to the iCalendar
Event evt = iCal.Create<Event>();

// Set information about the event
evt.Start = iCalDateTime.Today.AddHours(8);
evt.End = evt.Start.AddHours(18); // This also sets the duration
evt.Description = "The event description";
evt.Location = "Event location";
evt.Summary = "18 hour event summary";

// Set information about the second event
evt = iCal.Create<Event>();
evt.Start = iCalDateTime.Today.AddDays(5);
evt.End = evt.Start.AddDays(1);
evt.IsAllDay = true;
evt.Summary = "All-day event";

// Create a serialization context and serializer factory.
// These will be used to build the serializer for our object.
ISerializationContext ctx = new SerializationContext();
ISerializerFactory factory = new DDay.iCal.Serialization.iCalendar.SerializerFactory();
// Get a serializer for our object
IStringSerializer serializer = factory.Build(iCal.GetType(), ctx) as IStringSerializer;

string output = serializer.SerializeToString(iCal);
var contentType = "text/calendar";
var bytes = Encoding.UTF8.GetBytes(output);

return File(bytes, contentType, DownloadFileName);
}

12 comments:

  1. Thanks, appreciate this. Just what I was looking for.

    ReplyDelete
  2. Good information.

    ReplyDelete
  3. What version of dday are you using? I only found the .Net 2.0 version and Visual studio deletes it whenever I do a clean.

    ReplyDelete
  4. I have downloaded DDay iCal from following URL and its working for MVC3

    http://www.ddaysoftware.com/Pages/Projects/DDay.iCal/

    ReplyDelete
    Replies
    1. That worked. Thank you I must have had a older copy.

      Delete
    2. Or download using NUGet package Installer

      Delete
  5. hi, hx for this usefull article
    im using dattimeoffset in my model, how can i convert that to ical datetime for the start and end dates?

    thnx in advance.
    best regards, Ahmad

    ReplyDelete
  6. Hi,

    I'm trying to make an calendar in MVC and i need to store data in my db.

    How can i get the attendees for an event/calendar date?

    ReplyDelete
  7. Try something like this

    var attendes = new List();

    IAttendee reqattendee = new DDay.iCal.Attendee("MAILTO:balajisrmv@gmail.com")
    {
    CommonName = "Balajiprasad",
    Role = "REQ-PARTICIPANT"
    };
    attendes.Add(reqattendee);

    IAttendee optattendee = new DDay.iCal.Attendee("MAILTO:leandro@somemail.com")
    {
    CommonName = "Leandro",
    Role = "OPT-PARTICIPANT"
    };
    attendes.Add(optattendee);

    if (attendes != null && attendes.Count > 0)
    {
    evt.Attendees = attendes;
    }

    ReplyDelete
    Replies
    1. Refer from http://stackoverflow.com/questions/7748246/dday-ical-adding-an-attendee

      Delete
    2. Thanks, really useful code! nice job.

      Best Regards.

      Delete
  8. Hi,
    is it possible to create ics file with attachments. If possible how can i do it?
    any help is appreciated.
    Thankyou

    ReplyDelete