jQuery Ajax函数未在DNN中调用后端方法

时间:2019-03-25 10:32:10

标签: c# jquery ajax dotnetnuke dnn9

我无法让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

enter image description here

第二张图片 enter image description here

更新

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

我还尝试通过添加API API/DeleteReviewData来尝试使用该URL路径,但是由于在控制台中显示404错误,因此出现了[object Object]错误。

1 个答案:

答案 0 :(得分:2)

这是一个示例:

    $.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变量周围加上“'”。

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