2

我有返回 JSON 数据的 ASP.NET MVC 操作。我的客户端使用 jQuery 的ajax函数来检索这些数据并将其显示在屏幕上。我在 JavaScript 中使用控制器操作的绝对路径:

$.ajax({
    url: '/Home/Load',
    type: 'post',
    dataType: 'json'
})

问题是在某些环境中,我们会在前面多加一个虚拟目录,所以 URL 实际上是/Path/To/App/Home/Load. 我想知道是否有一种方法可以编写我的 JavaScript,以便每次部署时都不需要更新它。我可以使用相对 URL,例如../Home/Index,但偶尔我会移动我的 JavaScript 代码。使用 MVC 的捆绑器时,事情也会变得更加棘手。如果~角色能工作就好了。

4

2 回答 2

4

这是我的做法:

在主视图中添加以下行(此处使用 Razor 语法):

<script type="text/javascript">
    var appBaseUrl = "@Url.Content("~")";
</script>

然后在Javascript中:

$.ajax({
    url: appBaseUrl + 'Home/Load',
    type: 'post',
    dataType: 'json'
})
于 2013-02-28T15:16:12.030 回答
2

您可以将 URL 放入与您的 ajax 请求相关的元素中:

<div id="mydiv" data-url="@Url.Action("Load", "Home")">Click me to load ajax request!</div>

然后将您的JS代码更改为:

$.ajax({
    url: $('mydiv').data('url'), // Could be $(this).data('url') if clicking to load
    type: 'post',
    dataType: 'json'
})

这样做的好处是它仍然使用 MVC 路由,因此任何自定义路由仍然有效。

于 2013-02-28T15:17:00.430 回答