相対 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」を生成します。ただし、アクションやコントローラーを入力しなくても、ブラウザーに直接入力すると、正しくインデックス ページに移動します。