我有一个名为“索引”的视图。页面上有一个搜索栏,当您点击提交时,我有Javascript重定向:
var alerted='@url';
var url=alerted + "/" + $("#SearchText").val();
在Razor视图中,url
是一个定义为var url = Url.Action("Index", "Search");
但是在Javascript中,警告输出“/”。我不知道为什么会这样。如果我将其更改为另一个控制器视图,那很好。但如果我从索引中调用索引,它就什么也没给我。是什么赋予了?我需要它给我我所在页面的网址。
答案 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")
的所有来电都会在网址中产生“/搜索/索引”,因为他们首先点击此路由。但是,如果直接输入浏览器,输入无操作或控制器仍会正确地将您带到索引页。