Asp.net MVC:捕获路由url';并将它们传递给javascript函数

Asp.net MVC:捕获路由url';并将它们传递给javascript函数,asp.net,javascript,asp.net-mvc,routes,Asp.net,Javascript,Asp.net Mvc,Routes,简短:有没有一种方法可以让路由定义将“控制器/操作”字符串值传递给JavaScript函数,而不是直接执行控制器操作 更多:我有一个母版页,其中包含站点导航。现在,所有的页面都需要这个导航,但因为我不想每次页面调用都不断加载导航,所以我将所有页面都更改为PartialView。 每当在导航中单击菜单项时,都会通过JQuery.Load()方法加载这些局部视图 这一切都很好,直到现在,因为我注意到这也是一个网站的要求,能够直接链接到第X页,而不是default.aspx 因此,例如:主页是我的“d

简短:
有没有一种方法可以让路由定义将“控制器/操作”字符串值传递给JavaScript函数,而不是直接执行控制器操作

更多:
我有一个母版页,其中包含站点导航。现在,所有的页面都需要这个导航,但因为我不想每次页面调用都不断加载导航,所以我将所有页面都更改为PartialView。 每当在导航中单击菜单项时,都会通过JQuery.Load()方法加载这些局部视图

这一切都很好,直到现在,因为我注意到这也是一个网站的要求,能够直接链接到第X页,而不是default.aspx

因此,例如:
主页是我的“default.aspx”页面,它利用了我的母版页及其周围的导航。每个对新页面的调用都使用一个javascript函数,该函数在我的母版页中已知的div中加载特定的局部视图。因此,url永远不会离开“default.aspx”,但我的内容会发生明显的变化

问题是,当直接在地址栏中键入时,这些url也需要可用。但是,它们是局部视图,因此直接从地址栏加载它们会使它们显示出来,周围没有任何母版页。因此,我的问题是,是否可以捕获输入到地址栏中的路由,并将其传递给将在content div中加载该路由的JavaScript函数

(我希望我解释得足够好,如果没有,请随意询问更多信息)

您可以在url上使用哈希锚(#)并使用javascript阅读它

var url = document.location.toString();
if (url.match('#')) {
  anchor = url.split('#');
  // do whatever with anchor[1] .. 
}

第一个挑战是,当您使用AJAX加载javascript调用所需的客户端可访问URL的部分页面时。第二个挑战是,您需要加载HomeController并将URL的“页面”部分传递到javascript中的URL

var url = document.location.toString();
if (url.match('#')) {
  anchor = url.split('#');
  // do whatever with anchor[1] .. 
}
对于第一个方面,我将为部分页面创建一些抽象路由,即“/ajaxaccess/{controller}/{action}/{id}”。这将是第一条注册路线。第二条路由将接受任何控制器/操作引用,并始终由HomeController索引操作处理

在/Home/Index操作中,您获取请求的URL并将其切分,使用/{controller}/{action}/。。。节并使用TempData将其传递到default.aspx。在页面中,检查TempData是否存在,如果存在,则使用其中的值触发部分页面的AJAX页面加载(不要忘记,在URL传递到页面之前,您需要将“/ajaxaccess”(或您选择的任何内容)前置到URL


我不打算在这里提供代码,因为我认为您将从自己的工作中获得的信息将对您的未来非常宝贵。

您可以这样做,将此代码放在视图中的javascript代码中:

var szUrl=<%= ViewContext.RouteData.Route.ToString()%>;
var szUrl=;

然后,当前路由将存储在变量
szUrl

中。您完全正确,不想在javascript代码中硬编码URL,因为这样做会破坏MVC的一个主要租户。我是“关注点分离”之一那些不会在专用的.js文件外编写一行javascript的家伙,因此我无法像tuanvt那样动态指定URL。我要做的是使用MVCs URL.Action方法将我的服务URL发送到母版页(或特定页面,如果它没有在多个位置使用)上的隐藏输入中。然后我的脚本文件只是从隐藏的输入中提取值,并使用它

ASP.NET MVC视图源代码

<input id="serviceUrl" type="hidden" value="<%= Url.Action("Action", "Controller") %>" />

由于我有很多javascript调用而不更改页面,所以即使不是“要呈现的视图”,锚也会经常出现在URL中。因此,虽然这也是我的第一个想法,但在这个开发阶段,这并不是一个真正的选项。我将尝试这个Lazarus,非常有用的“答案”!
var szUrl='@ViewContext.RouteData.Route.ToString()“;
返回ASP.NET MVC 5中的
var szUrl='System.Web.Routing.Route';
,这是不需要的。