Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 操作没有给我实际的Url_Javascript_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

Javascript 操作没有给我实际的Url

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中,警报输出“/”。我不知道这是为什么。如果我将其更改为另一个控制器视图,则可以。但是如果我从索引调用索引,它什么也没有给我。有什么好处

我有一个叫做“索引”的视图。页面上有一个搜索栏,当您单击提交时,我有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”的原因相同。