Url.Action没有给我实际的Url

时间:2012-05-01 20:20:42

标签: javascript asp.net-mvc asp.net-mvc-3

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

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

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

的变量

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

1 个答案:

答案 0 :(得分:5)

您使用的是相对网址。默认控制器的Index操作的相对URL是“/”。尝试使用

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

如果您需要绝对网址。

在你的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")的所有来电都会在网址中产生“/搜索/索引”,因为他们首先点击此路由。但是,如果直接输入浏览器,输入无操作或控制器仍会正确地将您带到索引页。