2010-08-10 57 views
3

我很想知道人們如何處理以下情況。Asp.Net MVC路由 - 處理具有相同簽名的多條路由?

假設我們有一個數據字段,並且每個數據字段可以有無限數量的DataValues

我們有2個控制器來處理這些對象

  • 的操縱DataFieldController
  • DataValueContoller

現在,如果我們需要添加一個新的DataValue,我們需要知道CustomDataField的ID。以下URL將被使用,

/CustomDataValue/Add/1 

1 =數據字段ID

然而,因爲ASp.Net MVC發動機結合參數名稱的模型(即,在下面的情況下,我的DatValeu對象將具有它的ID被替換,當我實際嘗試通過FieldID時)

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

我們該如何處理?做下列顯然是行不通的。

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

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

我認爲這是一個常見問題,目前我找不到明顯的解決方案。如果簽名是不同的,但都是/ String/String/Int

==========================

這些路線如何運作呢?

  • /DataValue /添加/ {} DataFieldID
  • /DataValue /編輯/ {ID}
  • /DataValue /列表/ {} DataFieldID

我必須添加3條路線?

+0

我編輯了我的答案。我希望它有幫助。我將不會在很長一段時間。如果它不能解決問題,您可以重新提出問題。 – 2010-08-11 21:47:02

回答

5

在路由使用限制是這樣的:

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

它可以確保只有先從「CustomDataValue」稱這條線路的網址。它被聲明爲一個常量,與默認路由不同。確保這些指定的路由在默認路由之前聲明。由於沒有限制,所有的URL都與它匹配。

更新

我想你必須調用DataValueController方法與像http://domain.com/CustomDataValue/Add/23網址。如果是這樣的話請使用以下路線:

routes.MapRoute(
    "CustomData", // Route name 
    "CustomDataValue/{action}/{fieldid}", // URL with parameters 
    new { controller = "DataValue", action = "List", fieldid = UrlParameter.Optional } // Parameter defaults 
); 

這將工作,如果你有DataValueController名爲List的操作方法/添加/編輯。

+0

但是,我發現FieldId只會用於列表和編輯{id}將需要添加/編輯/刪除看起來像很多路線來創建! – LiamB 2010-08-10 16:57:42

+0

如果您有名爲列表和編輯的操作方法,它將起作用。這裏的要點是:如果URL中沒有任何操作,Home是要調用的默認操作。 http://domain.com/CustomDataValue和http://domain.com/CustomDataValue/Home都鏈接到相同的操作:主頁操作。 – 2010-08-10 17:01:51

+0

您可以閱讀[博客文章](http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx)以獲取熟悉路由。 – 2010-08-10 17:03:23