ASP.NET MVC的基本控制器

时间:2010-01-20 07:07:20

标签: asp.net asp.net-mvc routing

有没有办法创建一个处理所有路由的基本控制器实现?

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

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

一个人应该没事?

4 个答案:

答案 0 :(得分:1)

请记住,“控制器”和“操作”是路由系统执行动态魔术的关键词。如果只是用一些其他参数名替换路径中的“controller”参数,则可以始终使用默认控制器。

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

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

答案 1 :(得分: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。这样,您可以将路由维护工作保持在最低限度,集中管理您想要集中的行为,并且您仍然可以自己适应不断变化的需求,而无需撤消大量的变通方法。如果在一段时间后,您必须更改特定操作的行为,则只需执行该操作并更改代码。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

由于您不打算根据URL映射到控制器或方法,因此您只需要捕获几个参数,然后对它们执行某些操作。

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

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