如何在ASP.NET MVC 3中建模此路由?

时间:2012-11-14 20:59:41

标签: c# asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我需要模拟对我来说有点奇怪的路线。以下是他们希望我做的事情:

/AssetManagement -> Asset Landing page
/AssetManagement/Add -> Add an asset
/AssetManagement/Edit -> Edit an asset
/AssetManagement/Locations -> Locations landing page
/AssetManagement/Locations/Add -> Add a location
/AssetManagement/Locations/Edit -> Edit a location

我不确定,但我认为这需要用两个控制器建模。 AssetsController和LocationsController。我认为视图Add / Edit / Index将存在于受尊重的View文件夹下,我可能会定义两条路径:

routes.MapRoute(
    "AssetManagement", // Route name
    "AssetManagement/{action}/{id}", // URL with parameters
    new { controller = "Assets", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
    new[] { "MyApplication.Web.Website.Controllers" }
);

routes.MapRoute(
    "AssetManagementLocations", // Route name
    "AssetManagement/{controller}/{action}/{id}", // URL with parameters
    new { controller = "Locations", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
    new[] { "MyApplication.Web.Website.Controllers" }
);

我感觉有点不对劲。我错过了处理东西的最佳做法吗?这会导致什么样的问题?他们希望我构建的很多系统都是这样的。

//编辑 如果这是一个提出这样问题的好地方,我应该在哪里问他们?

2 个答案:

答案 0 :(得分:1)

你可以做的是创建一个区域。

在该区域中创建2个控制器,一个用于资产,另一个用于位置。

不使用路线(可能很危险)而是使用MVC概念。

您指定的第二条路线与区域密切相关。 创建区域时,将自动为您创建路径。 希望这有帮助。

Area - AssetManagement
   Controller1 - HomeController 
              Action1 - Add
              Action2 - Delete 

   Controller2 - LocationsController
              Action1 - Add
              Action2 - Delete 

routes.MapRoute(
    "AssetManagementLocations", // Route name
    "{Area}/{controller}/{action}/{id}", // URL with parameters
    new { controller = "Locations", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
    new[] { "MyApplication.Web.Website.Controllers" }
);

答案 1 :(得分:1)

查看attributerouting项目。您可以将Nuget安装到mvc并使用路径装饰您的操作方法或控制器 - 这导致明确意图确切地将哪些路由映射到哪个控制器/方法

https://github.com/mccalltd/AttributeRouting/wiki/2.-Usage