我应该如何在javascript调用中处理Asp.net MVC URL?

Kal*_*exx 5 javascript ajax asp.net-mvc

我正在尝试编写我的Asp.net MVC Web App的javascript部分(该部分网站是使用Extjs的RIA).但是,我在javascript中处理URL的正确方法已陷入停滞状态.

例如,现在我对该区域中的List操作进行了Ajax调用.List操作采用(int)参数.截至目前,这映射到我还没有改变路由(该网站目前太年轻,无法完成路线).通常在视图中,将此URL放在我会做的字符串中. ObjectsControllerReadingdocumentId/Reading/Objects/List@Html.Action("List", "Objects", new { area = "Reading", documentId = 3)

但是,这在处理javascript时不起作用,因为javascript不是由viewengine解析的.

为了解决这个问题,我有一个非常小的视图,它返回在我的主应用程序的js文件之前加载的javascript常量,例如URL.问题是我无法调用Html.Action此操作,因为在不断创建时我(显然)不知道ajax调用将是什么documentId,并且如果documentIdHtml.Action调用中排除异常发生.documentId可以在应用程序的正常工作流程中更改.

我该如何处理?我不想对URL进行硬编码,/Reading/Objects/List因为如果我为此更改路由(对于更友好的用户友好的json API),或者此Web应用程序未托管在域的根目录上,则URL将不再有效.

其他人如何在他们的javascript调用中处理MVC URL?

Joh*_*ika 6

这是我一直在使用的安全技术.即使您的路线发生变化,您的JavaScript也会自动符合新路线:

<script>
var url = '@Url.Action("List", "Objects", new { area = "Reading", documentId = "_documentId_")';
var id = 100;
var finalUrl = url.replace('_documentId_', id);
</script>
Run Code Online (Sandbox Code Playgroud)

" _documentId_"本质上是一个虚拟占位符.然后在我的JavaScript中,_documentId_一旦我知道它是什么,我用适当的id值替换" ".这样,无论您的路由如何配置,您的URL都将符合.


更新:12月20日

我刚看到这篇有趣的博文.作者构建了一个库,允许您使用VisualStudio中的intellisense支持在JavaScript文件内部构建路径.

http://weblogs.asp.net/zowens/archive/2010/12/20/asp-net-mvc-javascript-routing.aspx