2010-12-31 9 views
8

に等しいとき、私は自分のアプリケーションのために定義された次のルートを持っているアクションを省略:MVC ActionLinkのはアクションがデフォルトルート値

routes.MapRoute(
    "Referral", // Route name 
    "{referralCode}", // URL with parameters 
    new { controller = "Home", action = "Index" } // Parameter defaults 
); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}", // URL with parameters 
    new { controller = "Home", action = "Index" } // Parameter defaults 
); 

そして私は私のAdminControllerのindexアクションに行くためにActionLinkのを作成しようとしている:

@Html.ActionLink("admin", "Index", "Admin") 

しかし、ビューを実行するActionLinkのは、(indexアクション値が省略された)としてレンダリング:

<a href="/Admin">admin</a> 

通常これは問題ありませんが、「紹介」ルートと衝突しています。

注:私は代わりのような別のアクションレンダリングするためにActionLinkのを使用している場合は、「デフォルトを、」ActionLinkのは正しくレンダリング:

<a href="/Admin/Default">admin</a> 

「デフォルト」アクションが信じるように私をリード正しくレンダリングするという事実問題はルートに指定されたデフォルト値と関係があります。 ActionLinkが強制的に「インデックス」アクションを実行するように強制する必要はありますか?

答えて

8

あなたのデフォルトルート上のデフォルトactionパラメータ削除:

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

常にURLで指定するアクションを強制します。

+0

ありがとうございました。私は "Default"ルートのルートデフォルトからアクションとコントローラの両方を削除し、ReferralCode = UrlParameter.Optionalを "Referral"ルートに指定しました。 – rjygraham

関連する問題