web-dev-qa-db-ja.com

ルート値を含むURL.Action()

ASP.Net MVC 4アプリがあり、次のようなUrl.Actionヘルパーを使用しています:@Url.Action("Information", "Admin")

このページは、管理プロファイルの新規追加と編集の両方に使用されます。 URLは次のとおりです。

 Adding a new:       http://localhost:4935/Admin/Information
 Editing Existing:   http://localhost:4935/Admin/Information/5 <==Admin ID

サイトのEditing Existingセクションにいて、新しい管理者を追加することに決めたら、次のリンクをクリックします。

 <a href="@Url.Action("Information", "Admin")">Add an Admin</a>

しかし、上記のリンクが実際にhttp://localhost:4935/Admin/Information/5に行くという問題。これは、そのページで既存の管理者を編集しているときにのみ発生します。サイトの他のどこでも、http://localhost:4935/Admin/Informationに正しくリンクします

他の誰かがこれを見ましたか?

更新:

RouteConfig:

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );    
59
hjavaher

現在のルーティングスキーマに基づいて生成されたmvcの発信URL。

情報アクションメソッドにはidパラメーターが必要であり、ルートコレクションには現在要求されているurl(/ Admin/Information/5)のidがあるため、idパラメーターは既存のルートコレクション値から自動的に取得されます。

この問題を解決するには、UrlParameter.Optionalを使用する必要があります。

 <a href="@Url.Action("Information", "Admin", new { id = UrlParameter.Optional })">Add an Admin</a>
86
Emad Feiz