0

ビューに次の JavaScript コードがあります。

function getUrl(id) {
    var url = "@Url.Action("Product", "Product")/" + id;
    return url;
}

これはルーティング構成です:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
    name: "localized",
    url: "{culture}/{controller}/{action}/{id}/{title}",
    defaults: new { culture = "en", controller = "Home", action = "Index",
         id = UrlParameter.Optional, title = UrlParameter.Optional},
    constraints: new { culture = "en|fa" }
            );

Url.Action("Product", "Product") から期待しているのは返さ/en/Product/Product/れることですが/en/Product/Product/92、92 は現在の製品の ID であり、次の製品の URL を作成しようとしています。この回答の置換トリックのおかげで回避策を見つけることができましたが、今はなぜこれが起こっているのか知りたいだけです。

4

2 に答える 2

2

Url.Action指定しない場合、現在のルート値が含まれます。

代わりにこれを試してください

@Url.Action("Product", "Product", new { id = UrlParameter.Optional })/" + id;

または、呼び出しidで を null に設定してクリアし、最後に id を追加することもできます。Url.Action

于 2014-02-03T17:18:21.693 に答える
1

id はデフォルトで URL に渡されます。この行で渡されたIDでURLを作成します

var url = "@Url.Action("Product", "Product")/" + id;

URLで現在のIDを取得している場合、それがそのメソッドに渡されます。IDなしでURLを取得したい場合は、その部分を削除するだけです

var url = "@Url.Action("Product", "Product")";

リンクした置換は、スクリプトから呼び出しているアクションに情報を渡すのに非常に役立ちます。MVC と JavaScript を組み合わせる優れた方法

于 2014-02-03T17:18:43.430 に答える