0
我可以看到一个能够编译这段代码的例子吗?ASP.NET MVC路由
public IEnumerable<RouteBase> Routes
{
get
{
return new List<Route>()
{
new Route(...)
}
}
}
如果RouteCollection.MapRoute()
不存在,您会怎么做?
我想把我的控制器负责映射路由,而不是Global.asax.cs。 public IEnumerable<RouteBase> Routes
是我的控制器的成员。如果控制器负责路由,则通过使用中的单独硬编码URL在Global.asax.cs
中解耦路由是个坏主意。
在回答哈维先生:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
RouteTable.Routes.Include(new RootController());
}
}
public static class RouteCollectionExtension
{
public static RouteCollection Include(this RouteCollection routes, IRoutedController controller)
{
foreach (var route in controller.Routes)
{
routes.Add(route);
}
return routes;
}
}
和:
public class RootController : Controller, IRoutedController
{
public ActionResult Index()
{
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
public IEnumerable<RouteBase> Routes
{
get
{
return new List<Route>()
{
new Route("{controller}/{action}/{id}", ...?!?)
};
}
}
}
这不是鸡和鸡蛋的问题吗?如果控制器方法从不执行(路由引擎执行控制器方法,因此至少需要一条现有路由来执行此操作),它将如何设置路由? – 2010-04-23 05:00:31
也许吧。 :)## – MVCDummy09 2010-04-23 05:09:00
不知道该编辑是否针对我。控制器不负责路由,路由引擎是。我很佩服你的韧性,但你仍然没有解释如何执行控制器方法,所以你可以设置一些路由,如果路由引擎没有预定义的路由,因此无法执行控制器方法。 – 2010-04-23 05:10:07