10

I have a default.aspx.cs which contains my webmethod to call and I have my js file that containg my jquery ajax. I can't get to call the webmethod.

Here is my 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();
    }

And here is my js file:

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

You may notice that I'm alerting my data to ensure that I have the right values to send to my webmethod. But just like I said, it fails to call my webmethod and don't proceed to my success function within my ajax. Help! Thanks! :)

Sachin
  • 2,152
  • 1
  • 21
  • 43
Luke Villanueva
  • 2,030
  • 8
  • 44
  • 94

3 Answers3

23

You webmethod needs to be static.

[WebMethod]
public static Details[] getDetails(string columnname, string inputVal)
Claudio Redi
  • 67,454
  • 15
  • 130
  • 155
  • There's an errror when I put static on my webmethod. Error 2 An object reference is required for the non-static field, method, or property 'SearchMember_Updated.Default.Grid1D' – Luke Villanueva May 21 '12 at 16:34
  • +1. @ljpv14, So don't reference it... Makes no sense to update some UI in web method in your case as there is no corresponding HTML page. – Alexei Levenkov May 21 '12 at 16:37
  • 1
    You can't bind a server control on a webmethod. Use it for loading/saving data from/to server. I'm afraid you'll need to change that logic – Claudio Redi May 21 '12 at 16:37
  • @AlexeiLevenkov I believe I said that my webmethod is within my default.aspx.cs – Luke Villanueva May 21 '12 at 16:45
  • So does if mean that I need to pass it in another method in order to bind it with my gridview? How could I pass a list to another method? @Claudio Redi. Thanks! – Luke Villanueva May 21 '12 at 16:45
  • @ljpv14: you have to bind the grid on the normal page flow, you can't do it on the webmethod call. – Claudio Redi May 21 '12 at 17:21
  • @ClaudioRedi THANKS! I just set to static and at my success function in my ajax, I appended it to my gridview and it works. Thank you so much for that idea. Another question, how can I remove the last appended set of data? Because when I try to click my button the last appended data are still there and just added at the bottom the new ones. Thanks! – Luke Villanueva May 21 '12 at 17:30
  • Watch out for: [ASPX Static, ASMX Non Static](http://stackoverflow.com/a/24261823/314291) – StuartLC Mar 23 '15 at 14:40
2

This one is a complete sample, which shows the whole process at the beginning until at the end of how to call a server side "webmethod" via ajax request using asp.net page.

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

Zhan
  • 29
  • 2
1

Try to set type to "Get" and send the parameters in the URL instead of Data

url: "Default.aspx/getDetails/?colunmname="+colname+"&inputVal="+inputValue,
type: "GET"
Asif Mushtaq
  • 13,010
  • 3
  • 33
  • 42