Asp.net mvc 在IIS6上使用jqGrid和ASP.NET MVC 2进行POST Ajax调用会导致找不到

Asp.net mvc 在IIS6上使用jqGrid和ASP.NET MVC 2进行POST Ajax调用会导致找不到,asp.net-mvc,asp.net-mvc-2,iis-6,jqgrid,Asp.net Mvc,Asp.net Mvc 2,Iis 6,Jqgrid,这让我很困惑。我在IIS6上部署了一个mvc2应用程序,除了我的jqGrid调用来获取数据外,一切都正常 在我的开发机器上一切正常,但下面是我正在使用的两个URL 本地开发人员web服务器: POST http://localhost:port/Ctrl.mvc/JsonMethod IIS6(注意https-不确定这是否重要) 后一个URL会产生HTTP404,这真的很让人困惑,因为所有这些都可以在我的本地机器上正常工作。JsonMethod是用[AcceptVerbs(HttpVerbs.

这让我很困惑。我在IIS6上部署了一个mvc2应用程序,除了我的jqGrid调用来获取数据外,一切都正常

在我的开发机器上一切正常,但下面是我正在使用的两个URL

本地开发人员web服务器:

POST http://localhost:port/Ctrl.mvc/JsonMethod
IIS6(注意https-不确定这是否重要)

后一个URL会产生HTTP404,这真的很让人困惑,因为所有这些都可以在我的本地机器上正常工作。
JsonMethod
是用
[AcceptVerbs(HttpVerbs.Post)]
正确声明的

编辑 这是我的一大疏忽

我所有的JSON请求都是
/Ctrl.mvc/JsonMethod
。好的,在IIS服务器上,代码位于子文件夹-
AppName
中。因此,我得到了404,因为
https://domain/Ctrl.mvc/JsonMethod
未找到-这是正确的

基本上,我需要在部署时更改JSON请求——我真的不喜欢这样,但也许有更好的方法?

查看和

在使用POST的应用程序中是否有更多URL?他们在工作吗?您是否有更多没有扩展名(如.aspx或.mvc)的URL?他们在工作吗

更新:在像您这样的所有Java脚本中,我的URL的不同基/根部分都有问题。因为你使用jqGrid,我想你也有同样的问题。如果我在Web服务器上的虚拟目录中发布我的解决方案,那么所有调用我的Java脚本的URL都将被更改。因此,我给出了
window.location.pathname
并将其与
'/'
拆分,然后我发现一个新的
根路径
对应于新的位置。我将URL的这种重定基址放在一个函数中,我在解决方案的所有Java脚本中调用该函数。Hire是一个代码片段,在我的网站上运行非常完美:

var pathArray = window.location.pathname.split( '/' );
var rootPath = '';
for (var i = 0; i < pathArray.length; i++) {
    var p = pathArray[i];
    if (p === "") {
        continue;
    }

    if (p.toLowerCase() !== 'home') {
        rootPath += '/';
        rootPath += p;
    } else {
        break;
    }
}
this.urlBase = rootPath + '/Repository.svc';
this.urlExportBase = rootPath + '/ExportToExcel';
var pathArray=window.location.pathname.split('/');
var rootPath='';
对于(变量i=0;i
这个解决方案并不完美,但它是有效的。可能是您应该更改此“重定基址”功能,使其与您的一方一起工作。

查看和

在使用POST的应用程序中是否有更多URL?他们在工作吗?您是否有更多没有扩展名(如.aspx或.mvc)的URL?他们在工作吗

更新:在像您这样的所有Java脚本中,我的URL的不同基/根部分都有问题。因为你使用jqGrid,我想你也有同样的问题。如果我在Web服务器上的虚拟目录中发布我的解决方案,那么所有调用我的Java脚本的URL都将被更改。因此,我给出了
window.location.pathname
并将其与
'/'
拆分,然后我发现一个新的
根路径
对应于新的位置。我将URL的这种重定基址放在一个函数中,我在解决方案的所有Java脚本中调用该函数。Hire是一个代码片段,在我的网站上运行非常完美:

var pathArray = window.location.pathname.split( '/' );
var rootPath = '';
for (var i = 0; i < pathArray.length; i++) {
    var p = pathArray[i];
    if (p === "") {
        continue;
    }

    if (p.toLowerCase() !== 'home') {
        rootPath += '/';
        rootPath += p;
    } else {
        break;
    }
}
this.urlBase = rootPath + '/Repository.svc';
this.urlExportBase = rootPath + '/ExportToExcel';
var pathArray=window.location.pathname.split('/');
var rootPath='';
对于(变量i=0;i

这个解决方案并不完美,但它是有效的。您可能需要更改此“重定基址”函数,使其与您的团队一起工作。

使用mvc帮助程序为jqGrid ajax函数生成url,以确保使用正确的url

$('#mygrid').jqGrid({ 
    url: '<%= Url.Action("MyControllerJsonAction", Model.RouteValues) %>' 
});
$('#mygrid').jqGrid({
url:“”
});

使用mvc助手为jqGrid ajax函数生成url,以确保使用正确的url

$('#mygrid').jqGrid({ 
    url: '<%= Url.Action("MyControllerJsonAction", Model.RouteValues) %>' 
});
$('#mygrid').jqGrid({
url:“”
});

当我使用VS2012时,将我的项目(MVC+Kendo UI)发布到IIS6.0。问题就出来了。 F12调试错误是404,Chrome说页面找不到

这是因为在url中添加Doamin时,url不正确:

正确的代码是:

function QueryExpSendList() {
var EValid = true;
var uri = AJAXBaseUrl;
if (AJAXBaseUrl.indexOf("localhost") > 0) {
    uri = AJAXBaseUrl + "AJAX/QuerySendList/";
}
else {
    uri = AJAXBaseUrl + "KQExpress/AJAX/QuerySendList/";
}
GenerateExpressSendGrid(uri);
$("#QueryResult").show();
}

错误代码:

function QueryExpSendList() {
var EValid = true;
var uri = AJAXBaseUrl + "AJAX/QuerySendList/";
GenerateExpressSendGrid(uri);
$("#QueryResult").show();
}


借sirili@163.com

当我使用VS2012时,将我的项目(MVC+Kendo UI)发布到IIS6.0。问题就出来了。 F12调试错误是404,Chrome说页面找不到

这是因为在url中添加Doamin时,url不正确:

正确的代码是:

function QueryExpSendList() {
var EValid = true;
var uri = AJAXBaseUrl;
if (AJAXBaseUrl.indexOf("localhost") > 0) {
    uri = AJAXBaseUrl + "AJAX/QuerySendList/";
}
else {
    uri = AJAXBaseUrl + "KQExpress/AJAX/QuerySendList/";
}
GenerateExpressSendGrid(uri);
$("#QueryResult").show();
}

错误代码:

function QueryExpSendList() {
var EValid = true;
var uri = AJAXBaseUrl + "AJAX/QuerySendList/";
GenerateExpressSendGrid(uri);
$("#QueryResult").show();
}


借sirili@163.com

如果你用GET-verb浏览其他动作,效果如何?是的,所有动作都有效-我可以浏览fine如果你用GET-verb浏览其他动作,效果如何?是的,所有动作都有效-我可以浏览fine我喜欢它;我肯定会调查类似的事情:)。谢谢奥列格!我很高兴帮助你,丹!有时,一个人用密码写答案,却听不到提问者的回答,但如果我读到“谢谢,它行得通”,就够了,我看起来也很像☺.我喜欢它;我肯定会调查类似的事情:)。谢谢奥列格!我很高兴帮助你,丹!有时,一个人用密码写答案,却听不到提问者的回答,但如果我读到“谢谢,它行得通”,就够了,我看起来也很像☺.啊,很好-从来没有想到过这一点。尽管网格的调用在一个单独的js文件中。不过值得一试,谢谢!啊,很好-从来没有想到过这一点。尽管网格的调用在一个单独的js文件中。不过值得一试,谢谢!