使用 jquery ajax 在 aspx.cs 文件中调用 web 方法

Posted

技术标签:

【中文标题】使用 jquery ajax 在 aspx.cs 文件中调用 web 方法【英文标题】:Calling webmethod ina aspx.cs file using jquery ajax 【发布时间】:2012-05-28 04:07:38 【问题描述】:

我有一个 default.aspx.cs,其中包含要调用的 web 方法,并且我的 js 文件包含我的 jquery ajax。我无法调用 webmethod。

这是我的 default.aspx.cs:

    protected void Page_Load(object sender, EventArgs e)
    
        string[] MyArray = new string[1];
        MyArray[0] = "My Value";

        Grid1D.DataSource = MyArray;
        Grid1D.DataBind();
    

    [WebMethod]
    public Details[] getDetails(string columnname, string inputVal)
    
        List<Details> list = new List<Details>();

        DbAccess dbacc = new DbAccess();

        DataTable dt = dbacc.getReportDetails(columnname, inputVal);

        foreach (DataRow row in dt.Rows)
        
            Details _Details = new Details();
            _Details.memid = row["memid"].ToString();
            _Details.usrname = row["usrname"].ToString();
            _Details.fullname = row["fullname"].ToString();
            _Details.fname = row["fname"].ToString();
            _Details.mname = row["mname"].ToString();
            _Details.lname = row["lname"].ToString();
            _Details.bdate = row["bdate"].ToString();
            _Details.address = row["address"].ToString();
            _Details.sponsorid = row["sponsor_id"].ToString();
            _Details.parentid = row["parent_id"].ToString();
            _Details.placement = row["placement"].ToString();
            _Details.datejoined = row["date_joined"].ToString();


            list.Add(_Details);
        

        Grid1D.DataSource = list.ToArray();
        Grid1D.DataBind();

        return list.ToArray();
    

这是我的 js 文件:

function retrieveReportData() 
    var columnName = $("#ddlFilters").val();
    var input = $("#tags").val();

    if (columnName != "Select") 

        var Data = JSON.stringify( columnname: columnName, inputVal: input );

        alert(Data);

        $.ajax(

            url: "Default.aspx/getDetails",
            data: Data,
            type: "POST",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            success: function (mydata) 

                alert(mydata.d);
            
        );

    
    else 
        alert("Please choose search filter");

您可能会注意到我正在提醒我的数据以确保我有正确的值发送到我的网络方法。但就像我说的那样,它无法调用我的 web 方法,也没有在我的 ajax 中继续执行我的成功函数。帮助!谢谢! :)

【问题讨论】:

【参考方案1】:

您的 webmethod 必须是 static

[WebMethod]
public static Details[] getDetails(string columnname, string inputVal)

【讨论】:

在我的 webmethod 上设置静态时出现错误。错误 2 非静态字段、方法或属性“SearchMember_Updated.Default.Grid1D”需要对象引用 +1。 @ljpv14,所以不要引用它...在您的情况下更新 web 方法中的某些 UI 没有意义,因为没有相应的 html 页面。 您不能在 web 方法上绑定服务器控件。使用它从/向服务器加载/保存数据。恐怕你需要改变这个逻辑 @AlexeiLevenkov 我相信我说过我的 webmethod 在我的 default.aspx.cs 中 那么是否意味着我需要将它传递给另一种方法才能将它与我的gridview绑定?如何将列表传递给另一种方法? @克劳迪奥·雷迪。谢谢!【参考方案2】:

这是一个完整的示例,它展示了如何使用asp.net页面通过ajax请求调用服务器端“webmethod”从开始到结束的整个过程。

http://www.codeproject.com/Questions/374136/Call-Page-Method-From-Jquery-Ajax-Call

【讨论】:

【参考方案3】:

尝试将type设置为“Get”并在URL中发送参数而不是Data

url: "Default.aspx/getDetails/?colunmname="+colname+"&inputVal="+inputValue,
type: "GET"

【讨论】:

对不起,我没听懂你刚才说的话。 我的意思是你应该在URL中传递参数,并将类型设置为GET。请检查我的更新答案 我终于可以调用我的网络方法了。为什么它不在我设置断点的那一行停止?这是否意味着它没有继续使用 web 方法? 也可以使用数据:"?colunmname="+colname+"&inputVal="+inputValue 糟糕。我再次检查,仍然出现内部服务器错误。

以上是关于使用 jquery ajax 在 aspx.cs 文件中调用 web 方法的主要内容,如果未能解决你的问题,请参考以下文章

Jquery Ajax调用aspx页面方法

Jquery Ajax调用aspx页面方法

Jquery Ajax调用aspx页面方法

Jquery ajax调用后台aspx后台文件方法(不是ashx)

JQuery ajax调用asp.net的webMethod

用juery的ajax方法调用aspx.cs页面中的webmethod方法示例