Click here to Skip to main content
Licence CPOL
First Posted 13 Apr 2006
Views 49,539
Downloads 272
Bookmarked 40 times

ASP.NET Custom Control to Create Google Calendar Event Hyperlinks

By | 13 Apr 2006 | Article
An ASP.NET Custom Control to create Google Calendar Event hyperlinks.

Sample Image - GoogleCalendarEventLink.gif

Introduction

Google recently released the Google Calendar application. If your website has event information, allow users to add the event to their own Google Calendar easily with a Google Calendar event link.

Example link

What I've done is created a new ASP.NET HyperLink control, and added some properties that allow specific information to be attached to the HyperLink control for a Google Calendar Event. Then, I provided an overridden Render() function that assembles the specific NavigateUrl with the provided information, supplying defaults if necessary.

Render() code

protected override void Render(HtmlTextWriter writer)
{
    StringBuilder url = new StringBuilder();
    url.Append("http://www.google.com/calendar/event?");
    url.Append("action=TEMPLATE");

    // Event title

    string eventText = this.EventTitle;
    if (string.IsNullOrEmpty(eventText))
    {
        eventText = this.Text;
    }
    if (!string.IsNullOrEmpty(eventText))
    {
        url.AppendFormat("&text={0}", 
                         HttpUtility.UrlEncode(eventText));
    }

    // Event dates

    // TODO: Validate that a start or end date has been specified

    url.Append("&dates=");
    if (this.StartDateTime != null)
    {
        if (this.AllDayEvent || (this.StartDateTime == this.EndDateTime))
        {
            url.AppendFormat("{0}/{0}", 
                this.StartDateTime.ToString("yyyyMMdd"));
        }
        else
        {
            // TODO: Validate that EndDateTime is set,
            // because this is not an all day event

                const string UTCFORMATSTRING = "yyyyMMdd\\THHmmss\\Z";
                url.AppendFormat("{0}/{1}", 
                  this.StartDateTime.ToUniversalTime().ToString(UTCFORMATSTRING),
                  this.EndDateTime.ToUniversalTime().ToString(UTCFORMATSTRING));
            }
        }

        // TODO: Apparently on sprop is required by google,
        // so validate that one is specified
        // Organization info

        if (!string.IsNullOrEmpty(this.OrganizerName))
        {
            url.AppendFormat("&sprop=name:{0}", 
                HttpUtility.UrlEncode(this.OrganizerName));
        }
        if (!string.IsNullOrEmpty(this.OrganizerWebsite))
        {
            url.AppendFormat("&sprop=website:{0}", 
                HttpUtility.UrlEncode(this.OrganizerWebsite));
        }

        // Event location

        if (!string.IsNullOrEmpty(this.EventLocation))
        {
            url.AppendFormat("&location={0}", 
                HttpUtility.UrlEncode(this.EventLocation));
        }

        // Event description

        if (!string.IsNullOrEmpty(this.EventDescription))
        {
            url.AppendFormat("&details={0}", 
                HttpUtility.UrlEncode(this.EventDescription));
        }

        // Free/Busy
        // Only add to url if true since default false
        // and url could already be really long

        if (this.MarkAsBusy)
        {
            url.AppendFormat("&trp={0}", this.MarkAsBusy);
        }

        // Set the NavigateUrl

        this.NavigateUrl = url.ToString();
        base.Render(writer);
    }
}

This is my first stab at a server control (I usually just write user controls), so let me know if there are problems, but please be gentle :)

See also

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

slolife

Web Developer

United States United States

Member

http://www.onlinescorekeeper.com/

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralCan't run the demo PinmemberRens Duijsens4:47 29 Jun '08  
GeneralRe: Can't run the demo Pinmemberslolife7:00 30 Jun '08  
GeneralA few Suggestions PinmemberJames Curran5:46 14 Apr '06  
GeneralRe: A few Suggestions PinmemberChris Becker5:56 14 Apr '06  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web03 | 2.5.120517.1 | Last Updated 13 Apr 2006
Article Copyright 2006 by slolife
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid