MVC控制器路径在VS VS生产上与ajax调用不一样
本文关键字:VS ajax 调用 不一样 生产上 路径 MVC 控制器 | 更新日期: 2023-09-27 18:02:53
在javascript中,当我点击一个链接时,我做一个ajax调用:
/过程/添加
在Visual Studio中运行时效果很好。当我发布到服务器时,我得到一个javascript错误,说它找不到:
http://servernamehere/Process/Add/
应该在
中查找http://servernamehere/MyApp/Process/Add/
为什么在VS中它知道包含MyApp到路径,但在服务器上它没有?
function addRecord() {
var name = $("#name").val();
$.ajax({
url: "/Process/Add/",
type: "post",
data: { firstname: name },
success: function(data){
location.reload();
}
});
return false;
}
你必须在Javascript代码中呈现URL,所以它包含app root:
url: '@Url.Action("Add", "Process")'
如果不查看一些代码,就很难回答这个问题。但是,这通常是因为在本地运行时,您的站点被视为顶级站点,这意味着它不在"默认站点/[MY_SITE]"下。所以你的路径很好。
当你发布到服务器,然而,你的javascript代码不知道它不是/可能不是一个顶级网站。
我们内部有这个问题,我们在javascript中采用了以下模式。我们有一个init例程到我们的javascript库。
<script type="text/javascript">
$(document).ready(function () {
var apiPath = "@HttpContext.Current.Request.ApplicationPath";
MyLibrary.Init(apiPath);
});
</script>
然后在init方法中,我们根据需要附加了路径。所以int我们的init方法:
var apiParticipantPath = "/PATH/TO/REST/ENDPOINT";
var init = function(appRoot) {
if (appRoot !== "/") {
apiParticipantPath = appRoot + apiParticipantPath;
}
,然后最后在使用
$.ajax({
type: "DELETE",
url: apiParticipantPath,
data: {
--STUFF
},
dataType: "text"
})
.done(function() {
--STUFF
})
.fail(function() {
--STUFF
})
.always(function() {});
如果您使用这样的模式,那么无论您使用的是顶级站点还是DEFAULT_SITE下面的虚拟目录都无关紧要。这也很好,因为你可以保持你的javascript库分开,而不必嵌入到你的视图来获取@Url。
我猜这就是你的问题所在。如果没有,请告诉我,我们可以进一步研究。