Category Archive: ASP.NET

Subcategories: No categories

How To: Communication between UserControls

Problem : Allow one UserControl(DepartmentSelectorControl) to communicate /pass a value to another UserControl which will in turn

 


using System;
using System.Linq;
using System.Web.UI.WebControls;

public partial class Controls_DepartmentSelectorControl : System.Web.UI.UserControl
{

	private string selecteddepartment = string.Empty;
	public string SelectedDepartment
	{
		get { return selecteddepartment; }
		set
		{
			selecteddepartment = value;
			selecteddepartment = uxDepartments.SelectedItem.Text;
		}
	}

	//Create eventhandler to be consumed by the host page
	public event EventHandler SelectDepartment;

	protected void Page_Load(object sender, EventArgs e)
	{
		using (var context = new AdventureWorksEntities())
		{

			var departments = context.Departments.Select(p => new Department
			{
				DepartmentID = p.DepartmentID,
				GroupName = p.GroupName,
				Name = p.Name,
				ModifiedDate = p.ModifiedDate
			});
			foreach (var department in departments)
			{
				var dItem = new ListItem { Text = department.Name, Value = department.DepartmentID.ToString() };
				uxDepartments.Items.Add(dItem);
			}

		}

	}

	protected void uxDepartments_SelectedIndexChanged(object sender, EventArgs e)
	{
		//Set the member variable to what the user has selected
		selecteddepartment = uxDepartments.SelectedItem.Text;
		if(SelectDepartment != null)
		{
			//Event is raised and corresponding eventhandler is called to respond to the event
			SelectDepartment(this, new EventArgs());
		}

	}
}

How to generate an iCalendar file

Problem : Generate a iCalendar file which will trigger a calendar application (eg. outlook) to open with an updated event.

The iCalendar file is a fairly common feature which most developers add to enable  users to add events to their personalized calendars via a custom calendar application

save image

Solution : Create a web handler which will create a plain text file with the ‘ics’ extension.

using System;
using System.Web;
namespace MyNamespace
{
 public class iCalendar: IHttpHandler
 {

  public bool IsReusable
  {
   get
   {
    return true;
   }
  }

  string DateFormat
  {
    get
    {
      return "yyyyMMddTHHmmssZ"; // 20060215T092000Z
    }
  }

  public void ProcessRequest(HttpContext context)
  {
   DateTime startDate = DateTime.Now.AddDays(5);
   DateTime endDate = startDate.AddMinutes(35);
   string organizer = "foo@bar.com";
   string location = "My House";
   string summary = "My Event";
   string description = "Please come to\\nMy House";

   context.Response.ContentType="text/calendar";
   context.Response.AddHeader("Content-disposition", "attachment; filename=appointment.ics");

   context.Response.Write("BEGIN:VCALENDAR");
   context.Response.Write("\nVERSION:2.0");
   context.Response.Write("\nMETHOD:PUBLISH");
   context.Response.Write("\nBEGIN:VEVENT");
   context.Response.Write("\nORGANIZER:MAILTO:" + organizer);
   context.Response.Write("\nDTSTART:" + startDate.ToUniversalTime().ToString(DateFormat));
   context.Response.Write("\nDTEND:" + endDate.ToUniversalTime().ToString(DateFormat));
   context.Response.Write("\nLOCATION:" + location);
   context.Response.Write("\nUID:" + DateTime.Now.ToUniversalTime().ToString(DateFormat) + "@mysite.com");
   context.Response.Write("\nDTSTAMP:" + DateTime.Now.ToUniversalTime().ToString(DateFormat));
   context.Response.Write("\nSUMMARY:" + summary);
   context.Response.Write("\nDESCRIPTION:" + description);
   context.Response.Write("\nPRIORITY:5");
   context.Response.Write("\nCLASS:PUBLIC");
   context.Response.Write("\nEND:VEVENT");
   context.Response.Write("\nEND:VCALENDAR");
   context.Response.End();
  }
 }
}