您正在使用相对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")
将产生“/搜索/索引”,因为“/”不再是一个有效的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,因为他们会先打这个路由。但是,如果直接输入到浏览器中,则不输入任何操作或控制器仍然可以正确地将您带到索引页面。
我也有过这个问题。它与名为Index的操作的惯例有关,它来自同一个控制器。将索引的名称更改为其他内容并尝试使用 –