Мой скромный опыт общения с MVC показывает, что Routes в MVC ничего не знают о query string.
Поэтому не получится задать route, который каким-то образом зависел бы от query string.
Могу предложить такой workaround:
public static void RegisterRoutes( RouteCollection routes )
{
routes.IgnoreRoute( "{resource}.axd/{*pathInfo}" );
routes.MapRoute(
"SearchOrHome",
"",
new { controller = "Test", action = "SearchOrHome" } );
routes.MapRoute(
"Details",
"{*id}",
new { controller = "Test", action = "Details" } );
}
public class TestController : Controller
{
public ActionResult SearchOrHome( string q )
{
if ( string.IsNullOrEmpty( q ) )
{
return Content( "Home" );
}
else
{
return Content( "Search: " + query );
}
}
public ActionResult Details( string id )
{
return Content( "Details: " + id );
}
}