2012-03-09 109 views
0

我已經得到了URL http://localhost:xyz/HelloWorld,它指向Home控制器中的HelloWorld動作。Html.ActionLink根據URL產生不同結果

在頁面上呈現的URL上,我有一個Html.ActionLink指向同一頁面(是,指向當前頁面的鏈接)。

問題是如果頁面加載爲http://localhost:xyz/HelloWorld/(帶有斜線),則此鏈接僅指向頁面。如果頁面被加載爲http://localhost:xyz/HelloWorld(無斜線),則它將指向Home控制器的Index操作。

我已經嘗試了幾個重載,但我無法弄清楚是什麼導致了這個問題或者如何解決它。

Html.ActionLink("Hello World", "HelloWorld", "Home"); 
Html.ActionLink("Hello World", "HelloWorld", "Home", null, null); 
Html.ActionLink("Hello World", "HelloWorld", "Home", new { arg = 0 }, null); 

這些都有完全一樣的結果。如果有斜線,它們可以正常工作,如果沒有,則直接輸入http://localhost:xyz/

任何人都可以解釋這種行爲或如何解決它?

編輯(可能是相關的?):
arg存在,而不是0,在同一頁面顯示在http://localhost:xyz/HelloWorld/arg,並有「Hello World」的鏈接(這工作完全正常),以及類似的鏈接完美地工作。

Html.ActionLink("Argument", "HelloWorld", "Home", new {arg = arg}, null); 

無論是否存在尾部斜線,這都指向正確的位置。

ROUTES

routes.MapRoute(
    "HomeStart", 
    "", 
    new { controller = "Home", action = "Index" } 
); 

routes.MapRoute(
    "Hello World", 
    "HelloWorld/{arg}", 
    new {controller = "Home", action = "HelloWorld", arg = ""} 
); 
+1

我們可以看看你有你的路線設置? – 2012-03-09 19:54:25

+0

你的論點需要設置爲可選 – diaho 2012-03-09 19:59:02

+0

@ M.Babcock路線添加 – yoozer8 2012-03-09 19:59:07

回答

0

問題解決了。我分開了有和沒有參數的路線。

routes.MapRoute(
"Hello World", 
"HelloWorld", 
new {controller = "Home", action = "HelloWorld"} 
); 

routes.MapRoute(
"Hello World With Arg", 
"HelloWorld/{arg}", 
new {controller = "Home", action = "HelloWorld", arg = ""} 
); 
相關問題