2010-08-18 75 views
0

我很新的ASP.NET MVC和我工作過使用ASP.NET MVC 2ASP.NET MVC路由奇怪或意外行爲

對於所有場景的電子商務應用程序,默認路由工作正常。但我需要確定自己的URL規則如下圖所示:

  1. 的http://本地主機/ mvc2proj /產品
  2. 的http://本地主機/ mvc2proj /產品/產品名稱

對於本,我在默認路由上方定義了一條新路由:

routes.MapRoute(
     "Products", 
     "Products/{productName}", 
     new { controller = "Products", action = "Index" } 
); 

當主頁顯示時,它工作正常。那就是當URL是http:// localhost/mvc2proj時,菜單標題「Products」的錨定標記的href屬性是「href =」mvc2proj/Products「Products」。

但是,當URL是http:// localhost/mvc2proj/products/productname時,菜單標題「Products」的錨定標記的href屬性也變爲href =「mvc2proj/Products/productName」 。只要單獨點擊產品類別,就不應更改菜單href。它應該保持不變。

我定義的菜單爲用戶控制像這樣:

<li><%=Html.RouteLink("Home", new { Controller = "Main", Action = "Index" })%></li> 
<li><%=Html.RouteLink("Products", new{ Controller = "Products" }) %></li> 

產品的子類別的定義如下:

<%foreach(var product in Model.Products) {%> 
    <li><%=Html.RouteLink(Html.Encode(product.ProductName), new { controller = "Products", productName = product.ProductName })%></li> 
<%} %> 

的HTML子類別是:

<li><a href="/mvc2proj/Products/Product1">Product1</a></li> 
<li><a href="/mvc2proj/Products/product2">Product2</a></li> 

.. ..... 等等。點擊這些鏈接可以改變菜單的URL。

請幫幫我。

回答

0

這可能不是最好的解決辦法,但我周圍類似的問題得到了通過定義不同的路線的索引頁比對個別產品的網頁,即是這樣的:

routes.MapRoute(
"ProductIndex", 
"Products", 
new { controller = "Products", action = "Index" } 
); 

這將是額外的到您現有的路線。我想我實際上對每個方法都使用了不同的Action方法,但是如果爲參數提供了默認值,則不需要。

我相信有一個更好的方法,並且這個解決方案來自於對實際情況的理解不足,但它可能幫助您解決眼前的問題!

+0

感謝我的朋友。我已經實施了類似於您所提議的解決方案。但是現在,該URL看起來像http:// localhost/mvc2proj/products?productName = prod_name而不是http:// localhost/mvc2proj/products/prod_name。 有沒有解決方法? 最好的問候, Vikas Anand – user423719 2010-08-18 10:21:43

+0

這是因爲它在{productName}之前找到「ProductsIndex」路徑 - 嘗試先放置{productName},然後在轉到索引路由時不傳入產品名稱。確保你的Html.RouteLinks也指向正確的路線。 很高興有一點幫助,不要忘了接受答案,如果它解決了它;)(無恥的在那裏釣魚!) – randomsequence 2010-08-18 10:48:29

+0

你能用一個例子來解釋嗎?我對ASP.NET MVC很陌生。 :( – user423719 2010-08-18 11:54:37