MVC 3在AJAX post中复制了控制器名称
如果我在localhost:nnnn/Class页面上单击一个AJAX链接,该链接将发布到“Class/AddClass”,我会得到Class/AddClass的RawUrl,它工作得很好 如果我在localhost:nnnn/Class/Index页面上单击相同的链接,我会得到Class/Class/AddClass的RawUrl,它(显然)不起作用 我意识到我陷入了路由地狱,但谁在重写URL,为什么?我煞费苦心地浏览了jQuery代码,事实上它正在发布到Class/AddClass 谢谢你的洞察力。。。MVC 3在AJAX post中复制了控制器名称,ajax,asp.net-mvc-3,asp.net-mvc-routing,Ajax,Asp.net Mvc 3,Asp.net Mvc Routing,如果我在localhost:nnnn/Class页面上单击一个AJAX链接,该链接将发布到“Class/AddClass”,我会得到Class/AddClass的RawUrl,它工作得很好 如果我在localhost:nnnn/Class/Index页面上单击相同的链接,我会得到Class/Class/AddClass的RawUrl,它(显然)不起作用 我意识到我陷入了路由地狱,但谁在重写URL,为什么?我煞费苦心地浏览了jQuery代码,事实上它正在发布到Class/AddClass 谢谢你的
Eric问题不在于重写。您的AJAX请求是JavaScript,与ASP.NET路由引擎无关。当您使用
Class/AddClass
时,您将其设置为相对于当前URL的位置。您可以使用/Class/AddClass
,它将解析为站点的根目录。如果您甚至在虚拟目录中,这就产生了一个问题。我更喜欢从配置文件中提取完整URL:
var url = '<%: ConfigurationManager.AppSettings["WebsiteURL"] %>/Class/AddClass';
谢谢达斯汀。。。使用$.post('/Class/AddClass'…)可以使它工作。虽然我仍然很困惑谁在复制上一个示例中的控制器名称。哦,等等。。。我明白了!相对于当前URL的位置,意味着从Class/Index到Class/AddClass的post会给出Class/Class/AddClass,这是应该的。再次感谢。
var url = '<%: ResolveUrl("/Class/AddClass") %>';