Javascript 操作没有给我实际的Url
我有一个叫做“索引”的视图。页面上有一个搜索栏,当您单击提交时,我有Javascript重定向:Javascript 操作没有给我实际的Url,javascript,asp.net-mvc,asp.net-mvc-3,Javascript,Asp.net Mvc,Asp.net Mvc 3,我有一个叫做“索引”的视图。页面上有一个搜索栏,当您单击提交时,我有Javascript重定向: var alerted='@url'; var url=alerted + "/" + $("#SearchText").val(); 在Razor视图中,url是一个变量,定义为var url=url.Action(“索引”、“搜索”) 但在Javascript中,警报输出“/”。我不知道这是为什么。如果我将其更改为另一个控制器视图,则可以。但是如果我从索引调用索引,它什么也没有给我。有什么好处
var alerted='@url';
var url=alerted + "/" + $("#SearchText").val();
在Razor视图中,url
是一个变量,定义为var url=url.Action(“索引”、“搜索”)代码>
但在Javascript中,警报输出“/”。我不知道这是为什么。如果我将其更改为另一个控制器视图,则可以。但是如果我从索引调用索引,它什么也没有给我。有什么好处?我需要它提供我所在页面的url。您使用的是相对url。默认控制器的索引操作的相对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”,因为它们首先点击了这个路由。但是,如果直接在浏览器中输入,则不输入任何操作或控制器仍会正确地将您带到索引页。我以前也遇到过此问题。它与名为Index的操作的约定有关,并且来自同一个控制器。。将索引的名称更改为其他名称,然后再试一次。我不知道这会解决相对url的问题,谢谢!我最终重命名了索引操作以避开它。Search/Index恰好也是我在my global.asax中的默认URL,因此在my local上,URL显示为http://localhost:16721/
。如何使其显示为http://localhost:16721/Search/Index/
在global.asax中仍然将其作为默认值?它解析为“/”的原因是默认控制器和操作匹配。这意味着“/”与“/搜索/索引”相同。这与默认项目不是“/home/index”的原因相同。