ASP.NET MVC区域或定义的路由?

时间:2011-04-28 09:43:03

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

我想实现以下功能(使用ASP.NET MVC 3):

一个名为“apps”的控制器,其操作如下:

  • /应用/我的
  • /应用/机构
  • /应用/新

在最后一个动作中,我真的想要一些子动作,例如:

  • /应用/新的/产物
  • /应用/新/关税

我可以编写New()动作来取一些参数来说明我应该渲染哪个视图(即产品或关税)但感觉有点脏。

我真正想要的是产品和关税的单独行动方法。

最好的方法是什么?

我想我可以使用区域,但这对我想要的东西来说似乎有点过分了 - 只是编写自定义路线的解决方案吗?

非常感谢! 萨姆

2 个答案:

答案 0 :(得分:2)

如果您希望能够添加两个不同的内容,那么这是您控制器上的两个不同操作。听起来你只是想控制你的URL架构,所以我认为某种自定义路由就是答案。

为什么不为关税和产品设置单独的控制器?这将导致自然的URL架构。

答案 1 :(得分:2)

你可以使用区域,但是对于这个小数量我同意它可能是矫枉过正的。我会说新的动作接受参数就可以满足您的需求。如果你想传递更多的信息,但它仍然可以,它可能会变得更复杂。如果你想保持代码干净(呃),你可以让动作在不同的私有方法中完成所有复杂的操作。

但是,使用自定义路由方式(以及使用单独的控制器)...

<强>的Global.asax.cs

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute("newControllerRoute",
                    "apps/new/{action}",
                    new {controller = "NewApps"});

    routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
    );

}

添加控制器(NewAppsController)。

  public class NewAppsController : Controller
    {
        public ActionResult Product()
        {
            /* used as example */
            return Content("NewApps controller - Product");
        }

        public ActionResult Tariff()
        {
            /* used as example */
            return Content("NewApps controller - Tariff");
        }
    }

希望这有帮助。