【问题标题】:JQuery Ajax function not calling backend method in DNNJQuery Ajax 函数未在 DNN 中调用后端方法
【发布时间】:2019-08-15 13:50:13
【问题描述】:

我无法让 DotNetNuke 从我的 JQuery Ajax 函数执行后端代码。 我的 View.ascx 文件中有以下 JQuery 代码

我确实尝试将 URL 更改为 View.ascx/DeleteReviewData 但没有成功。

function deleteReview(ReviewID){
    var ReviewIDToDelete = ReviewID;
    $.ajax({
        type: "POST",
        contentType: "application/json",
        url: "https://dnndev.me/Product-View/DeleteReviewData",
        data: "{'deleteReviewID': '"+ ReviewIDToDelete +"'}",
        datatype: "json",
        success: function (data) {
            alert("Delete successfull");
        },
        error: function (error) {
            alert(error);
        }
    });
}

这是我没有在 View.ascx.cs 文件上执行的后端代码:

[System.Web.Services.WebMethod]
    public static void DeleteReviewData(int deleteReviewID)
    {
        try
        {
            //Deletes a review from the database
            using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["SiteSqlServer"].ToString()))
            {
                connection.Open();

                using (SqlCommand command = new SqlCommand($"delete from ProductReviews where ReviewID = {deleteReviewID}"))
                {
                    command.Connection = connection;
                    command.ExecuteNonQuery();
                }
                connection.Close();
            }
        }
        catch(Exception ex)
        {
            throw;
        }
    }

如果我应该使用 MapHttpRoute。请问有人举个例子吗?

我查看了以下帖子,但不确定是否使用 RouteConfig.cs 和额外的标头等:https://www.dnnsoftware.com/answers/execute-an-action-by-calling-an-ajax-post

我目前没有收到任何控制台错误。它进入成功部分。 当我在调试时将鼠标悬停在 Type、ContentType 或其中任何一个上时,它说未定义。请参见下面的示例。该网站正在使用 JQuery 01.09.01

第二张图片

更新

我更改了网址,现在出现 404 错误:url: $.fn.GetBaseURL() + 'DesktopModules/ProductDetailedView/DeleteReviewData'

我还尝试使用此 URL 路径添加 API API/DeleteReviewData,但我收到 [object Object] 错误,因为它在控制台中显示 404 错误。

【问题讨论】:

  • 您检查控制台是否有错误?请求失败的原因有数千个。
  • @RoryMcCrossan,我检查并没有控制台错误。奇怪的是,当您将鼠标悬停在 type、ContentType 或任何其他未定义的参数上时,但单击它们会将我带到 JQuery 1.9.1 文件。

标签: c# jquery ajax dotnetnuke dnn9


【解决方案1】:

这是一个例子:

    $.ajax({
        data: { "Id": IdToDelete },
        type: "POST",
        dataType: "json",
        url: "/DesktopModules/{API-ProjectName}/API/Main/DeleteExpenseByID"
    }).complete(function () {
        //...
    });

API方法:

    [HttpPost]
    [DnnAuthorize]
    public void DeleteExpenseByID(int Id)
    {
       //...
    }

您需要发送一个数字,这样您就不需要 ReviewIDToDelete var 周围的“'”。

还要检查 [POST] 属性的 DeleteReviewData,它似乎是 [GET] 调用。

【讨论】:

  • API-ProjectName 是默认命名空间还是程序集名称?另外,您有控制器部分的示例吗?我的 DNN 实例仍然找不到 URL。我看了这篇文章。 bytutorial.com/blogs/dnn/…
  • API-ProjectName 应该是您的项目名称,但您可以随时在 Windows 资源管理器中的 DesktopModules 下查看名称
  • 如果收到 404,请尝试使用 Postman 进行多次测试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-14
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多