Jay*_*Sun 3 javascript asp.net-mvc asp.net-mvc-3
我有一个名为"索引"的视图.页面上有一个搜索栏,当您点击提交时,我有Javascript重定向:
var alerted='@url';
var url=alerted + "/" + $("#SearchText").val();
Run Code Online (Sandbox Code Playgroud)
在Razor视图中,url是一个定义为的变量var url = Url.Action("Index", "Search");
但是在Javascript中,警告输出"/".我不知道为什么会这样.如果我将其更改为另一个控制器视图,那很好.但如果我从索引中调用索引,它就什么也没给我.是什么赋予了?我需要它来给我我所在页面的网址.
您正在使用相对URL.默认控制器的Index操作的相对URL是"/".尝试使用
Url.Action("Index", "Search", null, Request.Url.Scheme)
Run Code Online (Sandbox Code Playgroud)
如果你需要一个绝对的URL.
在你的gloabal.asax中,你可能有一个如下所示的路由方案:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Search", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)
默认值是路由使用的控制器/操作,如果未提供任何内容.如果从最后一个参数中删除了控制器和操作属性,则索引和搜索将不再是您的默认操作和控制器.现在
@Url.Action("Index", "Search")
Run Code Online (Sandbox Code Playgroud)
会产生"/ Search/Index",因为"/"不再是有效的URL.我实际上并不建议这样做,但要了解正在发生的事情,了解它是有用的.
如果在您添加的默认路线之前
routes.MapRoute(
"Index", // Route name
"Search/Index/{id}", // URL with parameters
new { controller = "Search", action = "Index", id = UrlParameter.Optional } // Parameter defaults);
Run Code Online (Sandbox Code Playgroud)
那么所有来自的调用Url.Action("Search","Index")都会在URL中产生"/ Search/Index",因为他们首先点击了此路由.但是,如果直接输入浏览器,输入无操作或控制器仍会正确地将您带到索引页面.
| 归档时间: |
|
| 查看次数: |
2122 次 |
| 最近记录: |