来自JavaScript的参考控制器操作

时间:2013-02-28 15:09:03

标签: javascript ajax asp.net-mvc jquery

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

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

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

2 个答案:

答案 0 :(得分:4)

我是这样做的:

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

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

然后在Javascript中:

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

答案 1 :(得分: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路由,因此任何自定义路由仍然有效。