2016-08-15 70 views
1

我構建了一個web應用程序,其中RouteConfig.cs是默認的應用程序。有沒有辦法在ActionLink中考慮MapRoute中的URL參數?

現在我收到了一個任務,我需要在URL的開頭追加一個客戶跟蹤ID,但保持其不存在的同樣功能。

http://localhost:60202/Home/Index //類客戶 http://localhost:60202/Location/123/Home/Index // URL與客戶跟蹤ID

此代碼123是我的客戶知道他發起呼叫到我的頁面位置的跟蹤ID。自從他們在全球各地使用以來,我無權要求他們改變這一點。

我試着用這個自定義路徑來實現:

routes.MapRoute(
    name: "Route", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 


routes.MapRoute(
    name: "Default", 
    url: "Location/{trackingId}/{controller}/{action}", 
    defaults: new { trackingId = 0, controller = "Home", action = "Index" } 
); 

在這種情況下,我可以用我上面提供兩個URL模式訪問我的應用程序,但我不能設法讓ActionLinkBeginForm藉此進入帳戶。

@Html.ActionLink("Início", "Index", "Home") //this should have full URL info 

有沒有辦法實現這一目標,而不需要在任何情況下,以改變每ActionLinkUrl.ContentBeginForm和環繞他們if

如何在不更改每個導航代碼的情況下使用兩個URL架構?

我們目前實施的方法是複製IIS中的文件夾,因爲目前只有4個文件夾,但在不久的將來,維護起來可能很痛苦。

我不知道爲什麼,但根據this問題它應該開箱即用。

編輯1

貌似改變這兩個MapRoute位置使得ActionLink工作如我所料。不幸的是Url.Content仍然是越野車。

回答

0

嗯,這很尷尬,但看起來你添加路線的訂單有所不同。所以我改變了這個:

routes.MapRoute(
    name: "Default", 
    url: "Location/{trackingId}/{controller}/{action}", 
    defaults: new { trackingId = 0, controller = "Home", action = "Index" } 
); 

routes.MapRoute(
    name: "Route", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

隨着這一變化每ActionLink開始如我所料工作。我仍然遇到了在Ajax調用中使用的Url.Content問題。

在這種情況下,我發現我應該用Ulr.Action代替它。

引用jscss仍然使用第二個MapRoute(或根本不關心路線),但這不是問題。

相關問題