2010-01-20 166 views
3

有没有办法创建一个处理所有路由的基础控制器实现?ASP.NET MVC基础控制器

IE/home/index和/ about/index都指向一个控制器方法,并返回视图。

我正在建设的网站是90%的静态内容,我不想去创建50个控制器。

一个应该没问题?

+0

我们可以请一份10个示例路线清单,以获得您的问题的准确示例。 2条路线是不够的。 – 2011-05-03 01:31:29

回答

1

请记住,“控制器”和“行动”是路由系统的关键词,以实现它的动态魔术。如果您只需使用其他参数名称替换路由中的“控制器”参数,则始终可以使用默认控制器。

routes.MapRoute("Default", 
       "{whatever}/{action}/{id}", 
       new { controller="Home", action="Index", whatever="", id="0" }); 

请注意,每个方法应该处理“无论”参数。

+0

事情是 routes.MapRoute( “默认”,//路线名称 “{控制器}/{行动} /(编号)”,// URL与参数 新{控制器= “基地”,动作=“ Index“,id =”“} //参数默认值 ); 这些都击中了BaseController,但像“/ site-faq/banking-faq这样的路线不会被击中 – john 2010-01-20 07:14:49

+0

难道你不能只是定义更多的路线来捕捉它们吗?/ {whatever}/{action}。/ {whatever}/{动作}/stuff/{morestuff *}。请记住,你应该把你的路线从最具体到最不具体。 – womp 2010-01-20 07:19:48

+0

routes.MapRoute( “排行榜”, “网站促销/网站领导板”, 新{控制器=“Base”,action =“Index”} );。 但是当我点击/ site-promotions/site-leader-board时,它从不碰到基础控制器的索引方法 – john 2010-01-20 07:27:03

0

你的global.asax文件中有正确的路由,你可以这样做。但是,重构或任何原因之后,您将很难管理网站。这里是学习路由在asp .net mvc:http://www.asp.net/learn/mvc/#MVC_Routing

0

因为你不打算映射到基于URL的控制器或方法,你只需要捕获几个参数,然后对它们做些什么。

routes.MapRoute( 
    "MyNewRoute", 
    "{firstParameter}/{secondParameter}", 
    new {controller="Home", action="Index"} 
); 

public ActionResult Index(string firstParameter, string SecondParameter) 
{ 
    if (firstParameter == "Home") 
    { 
     // Do something 
    } 
} 
+0

我认为“ - ”正在打破路线 – john 2010-01-20 07:30:14

1

我明白你希望保持简单的愿望,但根据我的经验,你总是期望某种程度的变化。如果我是你的情况,我会做这样的事情:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return RedirectToAction("Index", new { controller = "Main" }); 
    } 
} 

public class AboutController : Controller 
{ 
    public ActionResult Index() 
    { 
     return RedirectToAction("Index", new { controller = "Main" }); 
    } 
} 

public class MainController : Controller 
{ 
    public ActionResult Index() 
    { 
     // Do something important. 
     // Do something else important. 
     return View(); 
    } 
} 

要创建AboutController,我只是复制了HomeController中,改变了类名AboutController。通过这种方式,您可以尽量减少路由维护工作,集中您想要集中的行为,并且仍然允许自己适应不断变化的需求,而无需撤销很多解决方法。如果经过一段时间后,您必须更改特定操作的行为,那么您只需转到该操作并更改代码即可。