I think you probably need two separate routes for this.
routes.MapRoute(
"CampaignDetail",
"{controller}/{id}/{action}",
new { controller = "Campaign", action = "Index" }
);
routes.MapRoute(
"Campaign",
"{controller}/{action}",
new { controller = "Campaign", action = "Index" }
);