2015-07-02 67 views
1

我想知道創建我的控制器結構的最佳方法。ASP.NET MVC5中的複雜路由

比方說,我有幾個事件,每個事件我可以有幾個設備。

我的想法是有類似:

http://mydomain/event/1/device/4 

所以我可以訪問設備ID 4(屬於事件ID 1)。

我應該有兩個不同的控制器?一個事件和設備或設備信息必須在EventController?

如何在我的RouteConfig中使用此路由?

回答

1

這完全取決於你如何設置它。您可以使用單獨的控制器或相同的控制器。沒關係。

至於路由去,如果你使用的是標準的MVC路由,你需要爲此創建自定義路由:

routes.MapRoute(
    "EventDevice", 
    "event/{eventId}/device/{deviceId}", 
    new { controller = "Event", action = "Device" } 
); 

這將有這樣的對應:

public class EventController : Controller 
{ 
    public ActionResult Device(int eventId, int deviceId) 
    { 
     ... 
    } 
} 

只要確保您將放在之前的默認路線,所以它會先捕獲。有關自定義路由的更多信息,請參閱:http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/creating-custom-routes-cs

或者,在MVC5 +中,您可以使用屬性路由,這使得定義自定義路由的過程變得非常容易。在RouteConfig.cs,取消對該行:

// routes.MapMvcAttributeRoutes(); 

然後,在你的行動定義如下路線:

[Route("event/{eventId}/device/{deviceId}")] 
public ActionResult Device(int eventId, int deviceId) 
{ 
    ... 

您還可以使用[RoutePrefix]你的控制器類移動路線的一部分應用到整個控制器。例如:

[RoutePrefix("event")] 
public class EventController : Controller 
{ 
    [Route("{eventId}/device/{deviceId}")] 
    public ActionResult Device(int eventId, int deviceId) 
    { 
     ... 
    } 
} 

更多關於路由屬性看:http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx