3

我有一个名为“索引”的视图。页面上有一个搜索栏,当您单击提交时,我有 Javascript 重定向:

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

在 Razor 视图中,url变量定义为var url = Url.Action("Index", "Search");

但在 Javascript 中,警报输出“/”。我不知道为什么会这样。如果我将其更改为另一个控制器视图,那很好。但是如果我从索引中调用索引,它什么也没有给我。是什么赋予了?我需要它给我我所在页面的 url。

4

1 回答 1

5

您正在使用相对 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”,因为它们会首先点击此路由。但是,如果直接在浏览器中输入,则不输入任何操作或控制器仍会正确地将您带到您的索引页面。

于 2012-05-01T20:27:55.157 回答