Использование jquery post для mvc 3 не работает при развертывании

Итак, у меня есть это приложение MVC 3, у которого есть раскрывающийся список, который я использую для заполнения div через jquery. Он работает нормально локально, но когда я развертываю его на сервере, он перенаправляет неправильно. Здесь мой jquery:

$("#ddlCategoryMain").change(function () {
    $.post("/Home/Category/", { mileID: $(this).val() }, function (data) {
        refreshDiv($("div#main"), data);
    });
});

function refreshDiv(select, data) {
    select.html("");
    select.append(data);
}

Локально это работает отлично. Но при развертывании на моем сервере он ищет http://myserver/Home/Category вместо http://myserver/mywebsite/Home/Category

Я могу исправить это, просто добавив имя моего приложения перед /Home/Category в функции jquery, но это не кажется правильным...

Я также пытался добавить.. /, ~/,../../перед/Home, но это не имело значения.

Любые решения этой незначительной проблемы? Спасибо!

Ответ 1

Вариант 1

Предполагая, что ваш метод jQuery находится в вашем представлении, вы можете использовать Url.Action()

Создает полный URL-адрес для метод действия с использованием указанного имя действия и имя контроллера.

$("#ddlCategoryMain").change(function () {
    $.post('<%=Url.Action("Category", "Home")%>', { mileID: $(this).val() }, function (data) {
        refreshDiv($("#main"), data);
    });
});

Или это, если вы используете бритву

$("#ddlCategoryMain").change(function () {
    $.post('@Url.Action("Category", "Home")', { mileID: $(this).val() }, function (data) {
        refreshDiv($("#main"), data);
    });
});

Вариант 2

Если метод находится во внешнем js файле, вы можете объявить глобальную переменную в своем представлении.

var myUrl = '@Url.Action("Category", "Home")';

а затем в $.post

$("#ddlCategoryMain").change(function () {
    $.post(myUrl , { mileID: $(this).val() }, function (data) {
        refreshDiv($("#main"), data);
    });
});

Ответ 2

Мы столкнулись с той же проблемой, когда мы развернули код на сервере, локально он работал очень хорошо, так что это очень помогло нам.

Мы используем Razor и то, что мы делаем:

$.post("/Home/PostEditProduct/", { } ...

и теперь заменен на

$.post('@Url.Action("PostEditProduct","Home")', { } ...

и он работает.

Ответ 3

Не прямой ответ, но именно так я делаю это на своем сайте Zend MVC, когда добавляю свой jQuery - я устанавливаю var как базовый URL-адрес - тогда в вызове ajax поместите var перед дорожкой.

Итак, для меня я бы сделал:

    $this->jQuery()->addOnLoad('var baseURL = "'.$this->baseUrl('').'";');

Тогда я мог бы использовать;

    $.post(baseURL+"/Home/Category/"......