2009-04-10 4 views
2

、なぜ復帰ASP.NET MVCパスが変数に表示されるのはなぜですか?私のMVCアプリで

http://localhost:13/Forms/Edit/123 

http://localhost:13/Forms/Edit?member=123 

insted

Return RedirectToAction("Edit", "Forms", New With {.member = "123"}) 

ていますか?

そして、なぜ

<%=Html.ActionLink("MyLink", "Edit", "Forms", New With {.member = "123"}, Nothing)%> 

は同じことをするのでしょうか?

+0

ポストMVCのルートテーブルとあなた'LLより良い答えを得る... –

+0

ルートテーブルと@ tvanoffsonの答えのあなたの言及のコンボは私に解決策をもたらした - デフォルトのMapRouteが最初にリストされたので、それを追加したものは何かを捨てていた。 – gfrizzle

答えて

5

標準ルーティングは、第3のパラメータとしてidを使用するように設定されています。 "メンバー"を "id"に変更すると、期待するルートが得られます。

Return RedirectToAction("Edit", "Forms", New With { .id = "123"}) 
6

tvanfossonによれば、「id」はデフォルトルートエンジンが検索対象として設定したものです。 3番目のパラメータとして他のものがあれば、それはクエリ文字列として処理されます。

なぜですか?あなたのGlobal.asaxの中に、この方法のため:

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

あなたがそうのように、追加のroutes.MapRoute()の行を追加して、これを変更することができます。

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

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