3

「インデックス」というビューがあります。ページに検索バーがあり、送信をクリックすると、Javascript リダイレクトが行われます。

var alerted='@url';
var url=alerted + "/" + $("#SearchText").val();

Razor ビューでurlは、次のように定義された変数です。var url = Url.Action("Index", "Search");

しかし、Javascript では、alerted は "/" を出力します。これがなぜなのかわかりません。別のコントローラービューに変更しても問題ありません。しかし、Index から Index を呼び出しても、何も得られません。何を与える?私がいるページへのURLを教えてくれる必要があります。

4

1 に答える 1

5

相対 URL を使用しています。デフォルト コントローラの Index アクションの相対 URL は「/」です。使ってみて

Url.Action("Index", "Search", null, Request.Url.Scheme)

絶対 URL が必要な場合。

global.asax には、おそらく次のようなルーティング スキームがあります。

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

デフォルトは、何も指定されていない場合にルーティングが使用するコントローラー/アクションです。最後のパラメーターからコントローラーとアクションの属性を削除すると、インデックスと検索はデフォルトのアクションとコントローラーではなくなります。今

@Url.Action("Index", "Search")

「/」は有効な URL ではなくなったため、「/Search/Index」が生成されます。実際にこれを行うことはお勧めしませんが、何が起こっているのかを理解するために知っておくと役に立ちます。

デフォルトルートの前に追加した場合

routes.MapRoute(
                "Index", // Route name
                "Search/Index/{id}", // URL with parameters
                new { controller = "Search", action = "Index", id = UrlParameter.Optional } // Parameter defaults);

からのすべての呼び出しは、Url.Action("Search","Index")最初にこのルーティングにヒットするため、URL に「/Search/Index」を生成します。ただし、アクションやコントローラーを入力しなくても、ブラウザーに直接入力すると、正しくインデックス ページに移動します。

于 2012-05-01T20:27:55.157 に答える