Вы можете сделать это следующим образом:
routes.MapRoute("Default", "{category}/{subcategory}",
new { controller = "CategoryController", action = "Display", id = "" }
);
, а затем в контроллере:
public class CategoryController : Controller
{
public ActionResult Display(string category, string subcategory)
{
// do something here.
}
}
Не, что любой маршрут выше будет использоваться для всех маршрутов (вы не можете иметь a О странице и т. д., если вы не укажете явные маршруты до указанного выше).
Однако вы можете включить пользовательское ограничение, чтобы ограничить маршрут только существующими категориями. Что-то вроде:
public class OnlyExistingCategoriesConstraint : IRouteConstraint
{
public bool Match
(
HttpContextBase httpContext,
Route route,
string parameterName,
RouteValueDictionary values,
RouteDirection routeDirection
)
{
var category = route.DataTokens["category"];
//TODO: Look it up in your database etc
// fake that the category exists
return true;
}
}
Что вы используете в вашем пути, как это:
routes.MapRoute("Default",
"{category}/{subcategory}",
new { controller = "CategoryController", action = "Display", id = "" },
new { categoryExists = new OnlyExistingCategoriesConstraint() }
);
Таким образом она не будет мешать с другими определенными маршрутами.
hanks jmcd ..., что привело меня на правильный трек, и я выяснил остальное. (stackoverflow отлично) – WayneDV 2008-10-21 19:08:13