|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
Note: This is an unedited contribution. If this article is inappropriate,
needs attention or copies someone else's work without reference then please
Report This Article
IntroductionGoogle 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() 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
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||