2011-01-07 36 views
3

我正在探索爲我的下一個電子商務網站使用MVC的可能性。我似乎無法弄清楚的一件事是我是否可以使用我通常使用的相同的URL約定。目前,對任何產品的URL可以是下列之一:.Net MVC路徑不確定數量的文件夾(嵌套類別結構)

  • 類別/子類別/ Product1.html
  • 類別/子類別/ SubSubCategory/Product2.html
  • 類別/子類別/ SubSubCategory /產品3。 HTML
  • 類別/子類別/ SubSubCategory/SubSubSubCategory/Product4.html

我遇到的問題是嵌套類別結構。到目前爲止,我想出的唯一的事情如下:

routes.MapRoute(
    "Products", 
    "{categories}/{productname}", 
    new { controller = "Product", action = "Details", productname = UrlParameter.Optional }, 
    new { categories = @"\w+/\w+" } 
); 

我希望{}類可以用,我可以處理,以確定正確的類別,產品的下列的任何一個匹配屬於:

  • 體育/網球/球拍 /產品A
  • 體育/羽毛球/ 球拍 /機生產線CTB

但上面顯示的路線不能正常工作。

有沒有人知道這可以實現,或者如果它不能完成?

回答

0

您需要訪問URL的各個部分,因此您需要將類別部分分爲兩部分。這將使它更容易。

比方說,我們所說的這些類別的網球和羽毛球類別和球拍作爲一個產品類別

您需要一種方法來訪問類,productClass和產品名稱參數。假設在這種情況下「體育」是固定的,我會這樣做:

routes.MapRoute(
"Products", 
"sport/{category}/{productClass}/{productName}", 
new { controller = "Product", action = "Details", productClass = UrlParameter.Optional, productName = UrlParameter.Optional } 

);

你的操作方法會是這樣的

public ActionResult Details(string category, string productClass, string productName){ 
//Do whatever you need to do in order to get the specified product 

}

0

你可以使用領域在MVC2

因此,這將閱讀: 區/控制器/視圖/ ID

所以你的情況這將結束是:

運動是區域, 網球的控制器, 球拍的視圖, 產品A是一個ID或查詢字符串,

http://www.asp.net/mvc/videos/aspnet-mvc-2-areas

希望這是有道理的。

+0

區域是劃分一個大的網站變成可能具有不同的佈局和不同的控制器和視圖更小的易於管理的部分辦法。但是,我認爲這個問題是如何處理單個產品控制器中的文件夾層次結構。 – 2011-01-07 14:56:10

5

路由系統允許您定義包羅萬象的參數,它忽略斜線和捕捉 一切都交給一個網址的結尾。通過在星號(*)前加上 來指定一個參數爲catchall。

routes.MapRoute(null, "Articles/{*articlePath}", 
    new { controller = "Articles", action = "Show" } 
); 

只能有一個URL模式,一個包羅萬象的參數,它必須是最後一個(即 最右邊)在URL中的事情,因爲它從該點捕獲整個URL路徑前進。

儘管如此,它並未從查詢字符串中捕獲任何內容,因爲路由對象只查看URL的 路徑部分。

如果您讓訪問者通過任意 深度層次結構(例如內容管理系統(CMS))導航,Catchall參數非常有用。

您可以使用RouteData對象來提取有關路線的信息。爲了您的需要,您可能會創建一個自定義路由處理程序來分析路徑數據並調用正確的控制器方法。

相關問題