well I would add a custom route like this:
routes.MapRoute(
"NewRoute", // Route name
"{controller}/{action}/{id}/{another_id}", // URL with parameters
new { controller = "Events", action = "Calendar", id = UrlParameter.Optional, another_id = UrlParameter.Optional } // Parameter defaults
);
Your controller would then have an action method like this:
public ActionResult MyAction(string id, string another_id)
{
// in the question you mentioned that a a valid list querystring would contain
// multiple integer parameters, and an event querystring would include a
//seo friendly string
int para;
if (int.TryParse(id,out para))
{
// show list view
}
else
{
//show event view
}
}
you just need to recieve the parameters and run some kind of check to determine if you are going to show an event or a list.