繁体   English   中英

Ajax,asp.net mvc3路由和相对网址

[英]Ajax, asp.net mvc3 routes and relative urls

我有一个ASP.NET MVC3应用程序发布到这样的URL:

http://servername.com/Applications/ApplicationName/

在我的代码中,我使用jquery ajax请求,如下所示:

$.get(('a/b/c'), function (data) {}, "json");

当我在本地运行应用程序时,ajax请求直接转到正确的页面(是一个mvc路由),因为本地页面以“/”( localhost/a/b/c )结尾。

但是,当我发布到http://servername.com/Applications/ApplicationName/ ,尾随的“/”并不总是存在。 该网址可能是http://servername.com/Applications/ApplicationName ,然后会导致ajax请求尝试加载http://servername.com/Applications/ApplicationNamea/b/c ,但由于显而易见的原因而失败。

我已经考虑过重写url以附加一个尾随斜杠,但是A)它没有用,而且B)我觉得这个问题很难解决,并且配置javascript url工作会更好正确无论本地文件夹设置如何。

我确实试过“../a/b/c”和“/ a / b / c”,但似乎都没有效果。

先谢谢您的帮助!

就个人而言,我倾向于在我的视图中使用服务器相对URL的全局变量,如:

var BASE_URL = '@Url.Content("~/")';

然后你可以做以下事情:

$.get(BASE_URL + 'a/b/c'), function (data) {}, "json");

我想补充一点,如果你想让它完全全局化,你可以将它添加到你的/Views/Shared/_Layout.cshtml中。

我遇到了同样的问题,最终创建了两个JavaScript函数,它们反映了MVC Url帮助器方法Url.ActionUrl.Content 这些函数在_Layout.cshtml文件中定义,因此可用于所有视图,无论应用程序是在localhost的根目录中还是在服务器的子文件夹中,都可以正常工作。

<script type="text/javascript">
    function UrlAction(action, controller) {
        var url = ('@Url.Action("--Action--","--Controller--")').replace("--Action--", action).replace("--Controller--", controller);
        return url;
    }

    function UrlContent(url) {
        var path = "@Url.Content("~/--file--")";
        path = path.replace("--file--", url.replace('~/', ''));
        return path;
    }
</script>

然后可以像这样调用它们:

var url = UrlAction('AvailableAssetClasses', 'Assessment');
var url2 = UrlContent('~/Images/calendar.gif');

在ASP.NET MVC应用程序中生成URL时始终使用Url助手,并且永远不要对它们进行硬编码。 因此,如果此脚本直接位于视图内:

<script type="text/javascript">
    var url = '@Url.Action("a", "b")';
    $.get(url, function (data) {}, "json");
</script>

如果这个脚本在一个单独的javascript文件(应该是)里面,你无法访问服务器端帮助程序,你可以简单地将url放在一些相关的DOM元素中。 例如,使用HTML5 data- *属性:

<div data-url="@Url.Action("a", "b")" id="foo">Click me</div>

然后在你的javascript文件中:

$('#foo').click(function() {
    var url = $(this).data('url');
    $.get(url, function (data) {}, "json"); 
});

如果你不引人注目地AJAX化锚或表格,那么你已经有了网址:

$('a#someAnchor').click(function() {
    var url = this.href;
    $.get(url, function (data) {}, "json"); 
    return false;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM