我刚刚在我的机器上运行的IIS上发布了一个本地Intranet。该站点是MVC 4应用程序。它有以下jQuery代码来执行底层数据库表的AJAX更新,并刷新显示各种数据库表元素的Web网格。
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 for Web在调试模式下本地运行时,一切正常。但是当我输入一个URL来从我的IIS运行它时,showHideButtons运行良好,但AJAX更新不再有效。很疑惑。任何人都可以解释可能出现的问题吗?非常感谢。
答案 0 :(得分:0)
我为Debug和IIS版本的页面源做了一个WinDiff。我注意到以下情况。
调试版本: form action =“/ Home / Create”method =“post” IIS版本: form action =“/ EFRMPRTEST / Home / Create”method =“post” (删除了一些标签)
所以我通过在加载函数中的/ Home / #gridContent前放入/ EFRMPRTEST来修改我的jQuery函数。现在看起来像:
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版本就像魅力一样。
答案 1 :(得分:0)
我有一个类似的问题。我在一个命名网站(而不是DefaultWebSite)中运行一个Web应用程序。我发现我的ajax调用需要来自网站的路径,而不是网络应用程序。我尝试了上面的解决方案并且有效。但是,我觉得每次移动到不同服务器上的不同网站时都无法更改URL。所以我尝试使用在我的情况下工作的Url.Action()。我怀疑它对上述用户的gridContent.load('url.Action('#gridContent','Home')',function(){showHideButtons(gridContent);});
的效果相同