.net 在基于MVC3或MVC4的webwiste post中,如果我移动它,它将无法协同工作;子文件夹的虚拟位置
我已经开发了一个网站并在服务器上发布了它,在帖子中我有类似于.net 在基于MVC3或MVC4的webwiste post中,如果我移动它,它将无法协同工作;子文件夹的虚拟位置,.net,asp.net-mvc-3,asp.net-mvc-4,.net,Asp.net Mvc 3,Asp.net Mvc 4,我已经开发了一个网站并在服务器上发布了它,在帖子中我有类似于/Home/GetResult的url,其中Home是控制器,GetResult是控制器上的操作方法 到目前为止,它运行良好,开发和部署没有问题 现在我想把整个网站移到一些子文件夹,并希望通过以下url访问它;现在在服务器端,移动到一个文件夹并将该文件夹映射到虚拟子文件夹就完成了 现在我的问题开始了,所有的帖子都在网站上无法完成他们的工作。然后我换了一个贴子试试 从Post URL:/Home/GetResult到/Version1/
/Home/GetResult
的url,其中Home
是控制器,GetResult
是控制器上的操作方法
到目前为止,它运行良好,开发和部署没有问题
现在我想把整个网站移到一些子文件夹,并希望通过以下url访问它;现在在服务器端,移动到一个文件夹并将该文件夹映射到虚拟子文件夹就完成了
现在我的问题开始了,所有的帖子都在网站上无法完成他们的工作。然后我换了一个贴子试试
从Post URL:/Home/GetResult
到/Version1/Home/GetResult
它开始工作了,但为什么会这样呢?如果这是唯一的方法,那么它意味着每次我们将其移动到某个次虚拟文件夹时,都需要更改post url
创建子虚拟目录之前的Java脚本:
$.ajax({
type: 'POST',
url: "/Home/GetResult",
data: JSON.stringify(data),
success: function (returnPayload) {
if (returnPayload == "true") {
// do job for success on UI.
}
else {
// do job for Failuer on UI.
}
},
error: function (xhr, ajaxOptions, thrownError) {
// do job for Exception on UI.
},
dataType: "json",
contentType: "application/json",
processData: false,
async: false
});
$.ajax({
type: 'POST',
url: "/Version1/Home/GetResult",
data: JSON.stringify(data),
success: function (returnPayload) {
if (returnPayload == "true") {
// do job for success on UI.
}
else {
// do job for Failuer on UI.
}
},
error: function (xhr, ajaxOptions, thrownError) {
// do job for Exception on UI.
},
dataType: "json",
contentType: "application/json",
processData: false,
async: false
});
创建子虚拟目录后的Java脚本:
$.ajax({
type: 'POST',
url: "/Home/GetResult",
data: JSON.stringify(data),
success: function (returnPayload) {
if (returnPayload == "true") {
// do job for success on UI.
}
else {
// do job for Failuer on UI.
}
},
error: function (xhr, ajaxOptions, thrownError) {
// do job for Exception on UI.
},
dataType: "json",
contentType: "application/json",
processData: false,
async: false
});
$.ajax({
type: 'POST',
url: "/Version1/Home/GetResult",
data: JSON.stringify(data),
success: function (returnPayload) {
if (returnPayload == "true") {
// do job for success on UI.
}
else {
// do job for Failuer on UI.
}
},
error: function (xhr, ajaxOptions, thrownError) {
// do job for Exception on UI.
},
dataType: "json",
contentType: "application/json",
processData: false,
async: false
});
上面是创建虚拟目录之前/之后包含post的简单代码段。
在上面的代码中,如果我不更改帖子url,我将无法发布。硬编码的url会给您带来问题。请使用html帮助程序。例:
$.ajax({
type: 'POST',
url: '@Url.Action("GetResult", "Home")', // Will generate the proper url for you.
data: JSON.stringify(data),
success: function (returnPayload) {
}
});
正如评论中所指出的,razor语法只有在脚本位于页面内时才有效,并且不能与外部javascript文件一起使用。如果您使用的是外部文件,那么我建议您将URL分配给外部脚本可以访问的变量。例:
index.cshtml
<script src="~/Scripts/MyAppScript.js"></script>
<script type="text/javascript">
MyApp.GetResultUrl = '@Url.Action("GetResult", "Home")';
</script>
不是这样的,你能告诉我们呼叫代码吗?问题是你的代码。请始终借助html帮助程序为您生成url,例如
@url.Action
,@html.ActionLink
,而不是硬编码。它将生成正确的url,而不管您的虚拟目录如何。只有当您的javascript在razor视图中时,它才有效。如果它是一个外部的.js文件,它将无法工作。作为对此的评论,如果你有一个单独的javascript库,你当然不能这样做。我们通常要做的是,我们将以类似“Init”的方法将一个变量传递到我们的库中,该方法使用@Url.Action表示路径。它通过使用@Url.Action(“GetResult”、“Home”)进行解析。是的,将JS保存在单独的文件中是一种很好的做法。我创建了它,并在文件顶部和单独的文件中声明了一个变量。