Ajax 在 Controller 中找不到我的函数 url/path 是错误的(orchard)mvc
Ajax can't find my function in Controller url/path is wrong(orchard)mvc
你好,我已经构建了 ajax 来调用我在 Control 中的函数。
Orchard 中的这个项目(其中的新项目)就像我所知道的 mvc。
我对函数 url/path 有疑问。
如果我使用 url: '@Url.Action("GetFilesList", "FileUpload")'
不工作
我知道在'@Url.Action中第一个值是我的函数名称,第二个是我的控制器名称(没有控制器本身)
但是像直接 url 那样工作它正在工作
'http://localhost:30321/OrchardLocal/VnModule.Module/FileUpload/GetFilesList'
这是我的代码:
工作:
$.ajax({
url: 'http://localhost:30321/OrchardLocal/VnModule.Module/FileUpload/GetFilesList',
type: 'POST',
data: {
sNum: "123",
__RequestVerificationToken: token
},
success: function () {
},
error: function () {
}
});
这不起作用:
$.ajax({
url:'@Url.Action("GetFilesList", "FileUpload")',
type: 'POST',
data: {
sNum: "123",
__RequestVerificationToken: token
},
success: function () {
},
error: function (xhr) {
}
});
我的控制器:
namespace VnModule.Module.Controllers
{
public class FileUploadController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
[ActionName("GetFilesList")]
public void GetFilesList(string sNum)
{
int myNumber = Int32.Parse(sNum);
}
}
}
所以我确定问题出在 url: '@Url.Action("GetFilesList", "FileUpload")'
但我不明白我做错了什么。
你有什么想法吗?
Orchard Documentation link about module
Orchard CMS 中的每个模块都是 ASP.NET MVC 项目的一个区域。所以你需要在代码中添加 area 属性,如:
url: '@Url.Action("GetFilesList", "FileUpload", new{area = "module name here"})'
这样你的问题应该就解决了
在网络面板中检查您的 URL 并确定在 ajax 请求中调用了哪个 URL 这对您找到解决方案有很大帮助,如果需要的话,根据果园通过区域然后相应地更改 @Url.Action
。
我找到了如何在外部 js 文件中查看 url(Url.Action 剃刀)的解决方案;
我已将带有此路径的数据 ID 添加到我的按钮,如下所示:
<input type="submit" value="Savee" id="btn_UploadImg" onclick="btn_Upload_Click(this)" data-urlaction="@Url.Action("GetFilesList", "FileUpload", new { area = "VnModule.Module" })" />
要在外部 js 文件中获取此 Url 操作路径,您可以这样:
var funcUrl = $("#btn_UploadImg").data("urlaction");
$.ajax({
url: funcUrl,
type: 'POST',
data: {
sNum: "123",
__RequestVerificationToken: token
},
success: function () {
},
error: function (xhr) {
alert("Error:"+xhr.responseText);
console.log(xhr.responseText);
console.info(xhr);
}
});
你好,我已经构建了 ajax 来调用我在 Control 中的函数。 Orchard 中的这个项目(其中的新项目)就像我所知道的 mvc。
我对函数 url/path 有疑问。
如果我使用 url: '@Url.Action("GetFilesList", "FileUpload")'
不工作
我知道在'@Url.Action中第一个值是我的函数名称,第二个是我的控制器名称(没有控制器本身)
但是像直接 url 那样工作它正在工作
'http://localhost:30321/OrchardLocal/VnModule.Module/FileUpload/GetFilesList'
这是我的代码: 工作:
$.ajax({
url: 'http://localhost:30321/OrchardLocal/VnModule.Module/FileUpload/GetFilesList',
type: 'POST',
data: {
sNum: "123",
__RequestVerificationToken: token
},
success: function () {
},
error: function () {
}
});
这不起作用:
$.ajax({
url:'@Url.Action("GetFilesList", "FileUpload")',
type: 'POST',
data: {
sNum: "123",
__RequestVerificationToken: token
},
success: function () {
},
error: function (xhr) {
}
});
我的控制器:
namespace VnModule.Module.Controllers
{
public class FileUploadController : Controller
{
[HttpPost]
[ValidateAntiForgeryToken]
[ActionName("GetFilesList")]
public void GetFilesList(string sNum)
{
int myNumber = Int32.Parse(sNum);
}
}
}
所以我确定问题出在 url: '@Url.Action("GetFilesList", "FileUpload")'
但我不明白我做错了什么。
你有什么想法吗?
Orchard Documentation link about module
Orchard CMS 中的每个模块都是 ASP.NET MVC 项目的一个区域。所以你需要在代码中添加 area 属性,如:
url: '@Url.Action("GetFilesList", "FileUpload", new{area = "module name here"})'
这样你的问题应该就解决了
在网络面板中检查您的 URL 并确定在 ajax 请求中调用了哪个 URL 这对您找到解决方案有很大帮助,如果需要的话,根据果园通过区域然后相应地更改 @Url.Action
。
我找到了如何在外部 js 文件中查看 url(Url.Action 剃刀)的解决方案;
我已将带有此路径的数据 ID 添加到我的按钮,如下所示:
<input type="submit" value="Savee" id="btn_UploadImg" onclick="btn_Upload_Click(this)" data-urlaction="@Url.Action("GetFilesList", "FileUpload", new { area = "VnModule.Module" })" />
要在外部 js 文件中获取此 Url 操作路径,您可以这样:
var funcUrl = $("#btn_UploadImg").data("urlaction");
$.ajax({
url: funcUrl,
type: 'POST',
data: {
sNum: "123",
__RequestVerificationToken: token
},
success: function () {
},
error: function (xhr) {
alert("Error:"+xhr.responseText);
console.log(xhr.responseText);
console.info(xhr);
}
});