2013-12-13 3 views
0

Я только что опубликовал локальную интрасеть для IIS, запущенной на моей машине. Сайт представляет собой приложение MVC 4. Он имеет следующий код jQuery для обновления AJAX базовой таблицы базы данных и обновления веб-сетки, отображающей различные элементы таблицы базы данных.Обновление Ajax работает в режиме отладки, но не в IIS

var printermapping = 
      { 
       "MTPrinterID": MTPrinterID, 
       "NTPrinterID": NTPrinterID, 
       "Active": "N" 
      }; 

     $.ajax({ 
      url: '/Home/UpdatePrinterMapping/', 
      data: JSON.stringify(printermapping), 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      success: function (response) { 
       gridContent.load('/Home/ #gridContent', function() { 
        showHideButtons(gridContent); 
       }); 
      } 
     }); 


function showHideButtons(grid) { 
grid.find('tr.webgrid-row-style, tr.webgrid-alternating-row').each(function() { 
    var th = $(this); 
    var Active = th.find("#lblActive1").text(); 
    if (Active == "Y") { 
     th.find('.activate').hide(); 
    } else { 
     th.find('.deactivate').hide(); 
    } 
}); 

Когда я запускаю локально в режиме отладки через VSE 2013 для Интернета, все работает нормально. Но когда я печатаю URL-адрес, чтобы запустить его из моего IIS, showHideButtons работает хорошо, но обновление AJAX больше не работает. Очень озадачен. Может ли кто-нибудь пролить свет на то, что может быть проблемой? Большое спасибо.

+0

Я должен добавить, что я запускаю IIS версии 7.5 – user3041439

ответ

0

Я сделал WinDiff для источника страницы как для версии Debug, так и для IIS. Я заметил следующее.

Debug версия: форма действия = "/ Главная/Создать" метод = "пост" версии IIS: форма действия = "/ EFRMPRTEST/Главная/Создать" метод = "пост" (с некоторыми теги удалены)

Поэтому я модифицировал функцию jQuery, вставив/EFRMPRTEST перед/Home/#gridContent в функции загрузки. Теперь это выглядит так:

var printermapping = 
      { 
       "MTPrinterID": MTPrinterID, 
       "NTPrinterID": NTPrinterID, 
       "Active": "Y" 
      }; 

     $.ajax({ 
      url: '/Home/UpdatePrinterMapping/', 
      data: JSON.stringify(printermapping), 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      success: function (response) { 
       gridContent.load('/EFRMPRTEST/Home/ #gridContent', function() { 
        showHideButtons(gridContent); 
       }); 
      } 
     }); 

Теперь версия IIS работает как очарование.

0

У меня была симулятивная проблема. Я запускал веб-приложение на именованном веб-сайте (а не в DefaultWebSite). Я обнаружил, что мой вызов ajax требует пути от веб-сайта, а не от веб-приложения. Я попробовал вышеуказанное решение, и оно сработало. Тем не менее, я чувствовал, что не могу изменять URL-адрес каждый раз, когда я переезжаю на другой веб-сайт на другом сервере. Поэтому я попытался использовать Url.Action(), который работал в моей ситуации. Я подозреваю, что это сработало бы так же для grid_content.load ('Url.Action (' #gridContent ',' Home ')', function() {showHideButtons (gridContent);});

Смежные вопросы