如果你不需要page=0&IdAgency=2
至少有2种选择:
与网址替换它像http://localhost:30120/Agency/AgencyName/2/0
和使用MVC.AGENCY.INDEX (string name, int? Page, int IdAgency)
(见WAY1以下路由)
从控制器中删除标识和页面,并仅按名称映射(仅当它是唯一的时)。你必须http://localhost:30120/Agency/AgencyName
和使用MVC.AGENCY.INDEX (string name)
(见Way2以下路由)
有你需要注册路线的搜索引擎优化的URL。您可以在Global.asax
的Application_Start
方法中做到这一点。 Here is a good overview
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Map("Way1", "Agency/{name}/{IdAgency}/{Page}", MVC.Agency.Index().AddRouteValue("page", 1)
, new { Page = @"\d*" });
routes.Map("Way2", "Agency/{name}", MVC.Agency.Index());
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
下面是我创建的几个扩展与T4MVC使用
public static class RouteExtensions
{
#region Map
public static Route Map(this RouteCollection routes, string routename, string url,
ActionResult result)
{
return routes.Map(routename, url, result, null, null, null);
}
public static Route Map(this RouteCollection routes, string routename, string url,
ActionResult result, object constraints)
{
return routes.Map(routename, url, result, null, constraints, null);
}
public static Route Map(this RouteCollection routes, string routename, string url,
ActionResult result, object defaults, object constraints, string[] namespaces)
{
return routes.MapRoute(routename, url, result, defaults, constraints, namespaces)
.SetRouteName(routename);
}
#endregion
public static string GetRouteName(this RouteValueDictionary routeValues)
{
if (routeValues == null)
{
return null;
}
object routeName = null;
routeValues.TryGetValue("__RouteName", out routeName);
return routeName as string;
}
public static Route SetRouteName(this Route route, string routeName)
{
if (route == null)
{
throw new ArgumentNullException("route");
}
if (route.DataTokens == null)
{
route.DataTokens = new RouteValueDictionary();
}
route.DataTokens["__RouteName"] = routeName;
return route;
}
}
谢谢你,但VS认不出我setRouteName()? – chadis
@chadis谢谢。我已将Get/SetRouteName方法添加到答案中。 – Cheburek