Asp.net MVC 3: развертывание. URL getJson не работают - PullRequest
2 голосов
/ 12 августа 2011

У меня есть очень простое приложение asv.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 все работает нормально, однако, когда я развертываю приложение на свежеустановленной версии iis7 на win2k8 r2, вызов getJSON завершается неудачно, и в функции ajaxError отображается ошибка «Не найдено».(само приложение работает нормально в противном случае).

Я могу фактически вызвать действие из браузера, набрав его в - http://webservername/myapp/Home/GetSomeData - и оно возвращает мне json.

Это ошибка конфигурации?Или я не должен делать это так?

TIA.

Ответы [ 2 ]

3 голосов
/ 12 августа 2011

Используйте UrlHelper, как показано ниже, чтобы сгенерировать правильный URL в обоих случаях:

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

При использовании бритвы это будет выглядеть как:

$.getJSON("@Url.Action("GetSomeData", "Home")", { oldData: "" }, function (data) {
    $.each(data, function (i, item) {
        var t = $("#listitem").tmpl(item);
        $(cl).append(t);
    });
});
3 голосов
/ 12 августа 2011

Проблема здесь в том, что ваши URL-адреса жестко закодированы и не содержат виртуальный каталог, из которого вы работаете.

Вместо того, чтобы жестко кодировать ваши URL-адреса, вы должны использовать маршрутизацию, встроенную в MVC.

Вы можете использовать Action метод UrlHelper для генерации ссылок для вас, таких как:

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

Так что:

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