Использование 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/"......