2012-03-09 15 views
0

http://localhost:xyz/HelloWorldというURLがありますが、これはHomeコントローラのHelloWorldアクションに向けられています。URLに応じてHtml.ActionLinkの結果が異なります

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/に直接進みます。

誰でもこの動作や解決方法を説明できますか?

EDIT(おそらく関連?):
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

経路の設定方法を確認できますか? –

+0

引数をオプションで設定する必要があります – diaho

+0

@ M.Babcockルートが追加されました – yoozer8

答えて

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 = ""} 
); 
関連する問題