2013-04-12 65 views
-1

現在,這個問題。我有一個電子商務網站,我有一個名爲Store的控制器,帶有一個操作索引。當某人輸入www.mysite.com/sony時,我想要使用參數brand=Sony轉到控制器存儲和操作索引。如果有人輸入www.mysite.com/sony-tv,我想轉到控制器存儲和操作索引,但參數brand=sonydepartment=tvAsp.net MVC路由總是以參數

我通過爲存儲在數據庫中的每種情況創建路由並在應用啓動時動態構建路由來獲得該路由。在少數情況下,它的工作很好。 首先,我需要索引路線。我需要在索尼之前映射索尼電視,否則/索尼電視同樣映射到/索尼。

當我進入網站的家(www.mysite.com)並點擊Url.Action(「Index」,「Store」,new {brand = Sony})時,它會將我路由到www.mysite.com/sony 。 NICE!現在,在SONY品牌中,我會點擊Url.Action(「索引」,「商店」,新品牌=索尼,部門=電視),我可以看到索尼的所有電視。

一切都運行良好,直到這裏。在數據庫中,我有1條路徑到/ sony,我說我有一個名爲品牌的索尼價值參數和一個索尼品牌的限制品牌。我有另外一條路線對索尼電視說同樣的道路。模式sony-tv有一個名爲sony的品牌參數和一個名爲tv的deparment的參數,以及相同的參數約束。

在我的腦海裏,它意味着www.mysite.com/Sony的路線是Store/Index/brand = sony,而www.mysite.com/sony-tv是Store/Index/brand = sony &部門=電視。有了約束,我明白,如果部門不是電視或者參數部門不存在,它將發送到www.mysite.com/sony

當我在www.mysite.com/sony-tv時,如果我將鼠標移過其他品牌,鏈接構建到Url.Action(「Index」,「Store」,new {brand = Apple})是www.mysite.com/Apple-Tv 我有一條路線Apple-TV等於索尼。該網址存在,但我沒有通過電視參數。我通過這個鏈接(品牌鏈接)只有品牌。我想將用戶轉移到品牌的根,他已轉移到品牌+部門。

我不知道,它看起來像部門變量再次通過,我不知道如何取消。

我完全錯了嗎?我在做什麼是有效的?我能做到嗎?我的錯誤在哪裏?

在CSHTML文件:

@Html.ActionLink(febrand.Name.ToUpper(), "Index", new { controller = "Store", brand= febrand.FriendlyName, department = string.Empty }) 

在最終的HTML文件(從谷歌瀏覽器顯示源代碼):這似乎是很多工作的東西,你可以做

<a href="/sony?department=tv">SONY</a> 
+0

更新回答 – Tommy

回答

1

最前一頁,有兩個自定義路線。此外,隨着您的路線表變得更大(例如添加更多品牌和/或部門),由於必須掃描更大的路線列表,因此您的網站的每個請求都需要更長的時間才能完成。

那麼,讓我們嘗試修復你的路由表。將這兩條路在Global.asax 上述您的默認路由:

routes.MapRoute(
    "Department", 
    "{brand}-{department}", 
    new { controller = "Store", action = "Index" }; 

routes.MapRoute(
    "Brand", 
     "{brand}", 
     new { controller = "Store", action = "Index" }); 

至於你的問題,當你創建動作鏈接,路由引擎握住部門路線值從你的觀點目前在。爲了讓它在生成鏈接時忘記該參數,在不需要時爲部門變量發送空值。

@Html.ActionLink("Apple", "Index", new{controller="Store", brand="Apple", department = string.empty}); 

編輯

我覺得你可能是一個奇怪的邊緣情況與你的路由(有全隔着那麼這個問題的例子不勝枚舉,如herehere)。除了我提供的解決方案之外,該解決方案是切換到Html.RouteLink而不是Html.ActionLink。

RouteLink簽名,我們將使用

Html.RouteLink(string linkText, string routeName, object RouteValues) 

示範品牌鏈接,你的代碼

@Html.RouteLink(febrand.Name.ToUpper(), "Brand", new { controller = "Store", action = "Index", brand= febrand.FriendlyName}) 
+0

感謝您的關注。 department = null指令會返回一個編譯器(vs2012)錯誤:無法將分配給匿名類型屬性。 它的權利?我還在做其他事情嗎? –

+0

嘗試分配部門= string.empty – Tommy

+0

另一個錯誤,現在在maprout指令: 路由URL不能以'/'或'〜'開頭,並且不能包含'?'字符 我無法使用/ {品牌} :( –