【问题标题】:JQuery code to call a c# method not working调用 c# 方法的 JQuery 代码不起作用
【发布时间】:2014-02-08 00:05:20
【问题描述】:

我正在从 JQuery 调用一个 C# 函数,但它给出了错误。

JQuery 函数写在 ascx 文件中,而要调用的 C# 函数写在该页面后面的代码中。我正在将用户控件加载到选项卡更改事件的 AJAX 选项卡中。

谷歌搜索,我发现我无法调用用用户控件编写的 C# 函数。所以我在主机页面(ASPX)中编写了一个函数,这个函数正在调用我的用户控制函数。

但是 AJAX 请求有些失败,我不知道在哪里。但有趣的是我在错误函数中保留了一个调试器,并检查了错误对象。

Status 是 200,Status 是 OK,readyState 是 4

并且 ResponseText 是页面的标记。这意味着页面已提供服务,但在 C# 函数中保留了断点。它永远不会命中。

我不知道发生了什么。这也是我第一次从前端调用 C# 函数。我不知道引擎盖下发生了什么。请帮忙。下面是代码: jQuery

$(function () {
            $(".hint ul li").click(function () {
                // remove classes from all
                $(".hint ul li").removeClass("active");
                // add class to the one we clicked
                $(this).addClass("active");
                //Ankit J, Implement logic to call jquery
                var Availability = this.childNodes[0].innerText.trim();
                debugger;
                $.ajax({
                    type: "POST",
                    url: "../Pages/MyPage.aspx/CallUCMethodFromJQuery",
                    data: "{'sAvailability' : 'Availability'}",
                    dataType: "json",
                    success: fnsuccesscallback,
                    error: fnerrorcallback
                });
            });
        });

        function fnsuccesscallback(data) {
            alert("success-->" + data.d);
        }
        function fnerrorcallback(result) {
            debugger;
            alert("error-->"+result);
        }

ASPX 页面的代码隐藏函数

[System.Web.Services.WebMethod]
public void CallUCMethodFromJQuery(string sAvailability)
{
    MyNamespace.UserControls.ControlName m = new UserControls.ControlName();
    m.EditAvailabilityValue(sAvailability);
}

然后是UserControl的代码

public void EditAvailabilityValue(string sAvailability)
{

}

抱歉没有提及.... JQuery 在用户控件中,因为点击事件的来源是用户控件中的 li 元素。此外,UserControl 位于 UserControls 文件夹中,主机页面位于 Pages 文件夹中,这两个文件夹都位于根文件夹中。

【问题讨论】:

    标签: c# jquery asp.net ajax ajax.net


    【解决方案1】:

    在您的 ajax 调用中添加 contentType: "application/json; charset=utf-8" 属性:

    $.ajax({
        type: "POST",
        url: "../Pages/MyPage.aspx/CallUCMethodFromJQuery",
        data: "{'sAvailability' : 'Availability'}",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        success: fnsuccesscallback,
        error: fnerrorcallback
    });
    

    然后将用户控件中的EditAvailabilityValue方法更改为静态:

    public static void EditAvailabilityValue(string sAvailability)
    {
    
    }
    

    并将后面的aspx页面代码中的CallUCMethodFromJQuery方法更改为static,以便可以使用jQuery调用:

    [System.Web.Services.WebMethod]
    public static void CallUCMethodFromJQuery(string sAvailability)
    {
        MyNamespace.UserControls.ControlName.EditAvailabilityValue(sAvailability);
    }
    

    【讨论】:

    • 抱歉没有提到...... JQuery 在用户控件中,因为点击事件的来源是用户控件中的 li 元素。此外,UserControl 位于 UserControls 文件夹中,主机页面位于 Pages 文件夹中,这两个文件夹都位于根文件夹中。
    • 感谢一百万个 ekad,它就像一个魅力。但是,我没有将 EditAvailabilityValue 设为静态,但 CallUCMethodFromJQuery 肯定需要是静态的,并且还需要内容类型。我在某处读到,如果您发送的是非 JSON 值,则无需放置此属性。任何可以帮助我理解这个概念的解释。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2018-07-26
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多