您正在使用相对 URL。默认控制器的 Index 操作的相对 url 是“/”。尝试使用
Url.Action("Index", "Search", null, Request.Url.Scheme)
如果您需要绝对 URL。
在您的 gloabal.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")
将产生“/Search/Index”,因为“/”不再是有效的 URL。我实际上不建议这样做,但了解一下以了解正在发生的事情很有用。
如果在您添加的默认路线之前
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”,因为它们会首先点击此路由。但是,如果直接在浏览器中输入,则不输入任何操作或控制器仍会正确地将您带到您的索引页面。