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);
        }
    });