Вы жестко закодировали URL-адреса в своем JavaScript, не так ли:
$.post('/home/index', function(result) {
});
вместо использования URL-помощников:
$.post('<%= Url.Action("index", "home") %>', function(result) {
});
Причина, по которой ваш код не работает при развертывании приложения в IIS, заключается в том, что теперь у вас есть виртуальный каталог, например: http://example.com/myapplication/home/index
. Если вы жестко закодировали URL-адрес вместо использования URL-помощников для его генерации, вы получите AJAX-запрос к http://example.com/home/index
, который, конечно, не работает, поскольку вы пропускаете имя приложения.
При локальной работе виртуальный каталог отсутствует, если вы используете встроенный веб-сервер Visual Studio и URL выглядит следующим образом: http://locahost:1234/home/index
.
Лично я бы порекомендовал вам просто использовать HTML-помощники для создания элементов DOM, таких как <form>
и <a>
, а затем ненавязчиво AJAXify их.
Например, вы можете иметь следующую форму:
<% using (Html.BeginForm("SomeAction", "SomeController")) { %>
... some input fields
<% } %>
который вы могли бы AJAXify следующим образом:
$(function() {
$('form').submit(function() {
$.post(this.action, $(this).serialize(), function(result) {
// TODO: process the results
});
return false;
});
});
Посмотрите, как мы больше не программируем URL-адреса в наших файлах javascript? Теперь все будет работать независимо от того, где вы разместите свое приложение.