asp.net mvc 3:部署。 getJson url 不起作用

发布于 2024-11-29 10:25:03 字数 904 浏览 1 评论 0原文

我有一个非常简单的 asp.net mvc3 应用程序,它使用 jquery::getJSON 调用我的控制器并通过 jquery::tmpl 获取一些数据顶部显示。

function ajaxError(jqXHR, textStatus, errorThrown) {
    alert(errorThrown);
}
....

    $.ajaxSetup({
        cache: false,
        error: ajaxError // tell me what the error was
    });

    var cl = $("#listcontainer");
    $(cl).empty();
    $.getJSON("/Home/GetSomeData", { oldData: "" }, function (data) {
        $.each(data, function (i, item) {
            var t = $("#listitem").tmpl(item);
            $(cl).append(t);
        });
    });

在 IIS Express 下一切正常,但是当我将应用程序部署到 win2k8 r2 上新设置的 iis7 时,getJSON 调用失败,并通过 ajaxError 函数显示错误“未找到”。 (否则实际应用程序运行正常)。

我实际上可以通过在浏览器中键入该操作来调用该操作 - http://webservername/myapp/Home/GetSomeData - 它返回 json 给我。

这是配置错误吗?或者我不应该这样做吗?

TIA。

I have a very simple asp.net mvc3 app that uses jquery::getJSON to call into my controller and get some data top display via jquery::tmpl.

function ajaxError(jqXHR, textStatus, errorThrown) {
    alert(errorThrown);
}
....

    $.ajaxSetup({
        cache: false,
        error: ajaxError // tell me what the error was
    });

    var cl = $("#listcontainer");
    $(cl).empty();
    $.getJSON("/Home/GetSomeData", { oldData: "" }, function (data) {
        $.each(data, function (i, item) {
            var t = $("#listitem").tmpl(item);
            $(cl).append(t);
        });
    });

Everything works ok under IIS express, however When I deploy the app to a freshly setup iis7 on win2k8 r2, the getJSON call fails with the error "Not Found" being displayed via the ajaxError function. (the actual app runs ok otherwise).

I can actually call the action from the browser by typing it in - http://webservername/myapp/Home/GetSomeData - and it returns the json to me.

Is this a configuration error? Or am I not supposed to be doing it like this?

TIA.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

指尖微凉心微凉 2024-12-06 10:25:03

这里的问题是您的 URL 是硬编码的,并且不包含您正在使用的虚拟目录。

您应该考虑使用 MVC 中内置的路由,而不是对 URL 进行硬编码。

您可以使用 UrlHelperAction 方法为您生成链接,例如

Url.Action("GetSomeData","Home")

$.getJSON(@Url.Action("GetSomeData","Home"),[...]

The issue here is that your URLs are hardcoded and don't contain the virtual directory you're working from.

Rather than hardcode your URLs you should look at using the routing built into MVC.

You can use the Action method of the UrlHelper to generate links for you such as:

Url.Action("GetSomeData","Home")

So that:

$.getJSON(@Url.Action("GetSomeData","Home"),[...]
风吹雨成花 2024-12-06 10:25:03

在这两种情况下,使用如下所示的 UrlHelper 生成正确的 URL:

Url.Action("GetSomeData", "Home")

如果使用 razor,则最终结果如下:

$.getJSON("@Url.Action("GetSomeData", "Home")", { oldData: "" }, function (data) {
    $.each(data, function (i, item) {
        var t = $("#listitem").tmpl(item);
        $(cl).append(t);
    });
});

Use the UrlHelper like below to generate the correct URL in both cases:

Url.Action("GetSomeData", "Home")

If using razor this would end up like:

$.getJSON("@Url.Action("GetSomeData", "Home")", { oldData: "" }, function (data) {
    $.each(data, function (i, item) {
        var t = $("#listitem").tmpl(item);
        $(cl).append(t);
    });
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文