7

RouteLink と ActionLink について質問があります。

次のルートを検討してください

routes.MapRoute("Routename1",
    "{someEnum}/SpecificAction/{id}/{stringId}",
    new { controller = "MyController", id = (int?)null, stringId= (string)null, action = "SpecificAction" },
    new { someEnum= "(EnumVal1|EnumVal2)" }
);

奇妙な {someEnum} 部分は、URL の典型的なコントローラー部分を形成する列挙型のすべての値に対して汎用コントローラーを使用しているためです。たとえば、/EnumVal1/Action/ と /EnumVal2/Action/ は同じコントローラーを使用します。ただし、それは問題の一部ではありません。

次の 2 つのリンク方法を検討してください。

<%=Html.RouteLink("Click me","Routename1", new { id = 32, stringId = "Yatzy" })%> 
<%=Html.ActionLink("Click me", "SpecificAction", "EnumVal1", new { id = 32, stringId = "Yatsy" }, null)%>

RouteLink は正しい URL を生成します。これは /EnumVal1/SpecificAction/32/Yatzy になります。

ActionLink は /EnumVal1/SpecificAction/32?stringId=Yatzy のような URL を生成します

どうしてこれなの?誰かが私にこれを説明してくれませんか。

4

1 に答える 1

4

RouteLink 指定した 1 つのルートしか使用できませんActionLink意図したものであるかどうかにかかわらず、最初に一致したルートが使用されます。あなたの2つの例は、おそらく異なるルートに一致しています。

Phil Haack のルーティング デバッガーは、これを明確にするのに役立ちます。

于 2009-12-17T16:23:03.737 に答える