2012-05-21 2 views
8

Ho un default.aspx.cs che contiene il mio webmethod per chiamare e ho il mio file js che contiene il mio jquery ajax. Non riesco a chiamare il webmethod.Chiamare webmethod ina aspx.cs file usando jquery ajax

Ecco il mio 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(); 
    } 

e qui è il mio file 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"); 
} 

Si può notare che sto avvisando i miei dati per garantire che ho il giusti valori da inviare al mio webmethod. Ma proprio come ho detto, non riesce a chiamare il mio webmethod e non procedere alla mia funzione di successo all'interno della mia ajax. Aiuto! Grazie! :)

risposta

19

È webmethod deve essere static.

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

C'è un errore durante il caricamento statico sul mio metodo web. Errore È necessario un riferimento a un oggetto per il campo, il metodo o la proprietà non statici 'SearchMember_Updated.Default.Grid1D' – ljpv14

+0

+1. @ ljpv14, Quindi non fare riferimento ... Non ha senso aggiornare alcune UI nel metodo web nel tuo caso in quanto non esiste una pagina HTML corrispondente. –

+1

Non è possibile associare un controllo server a un metodo web. Usalo per caricare/salvare dati da/verso server. Temo che dovrai cambiare questa logica –

1

tenta di impostare type a "Get" e inviare i parametri nell'URL invece di dati

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

Scusa ma non ho capito quello che hai appena detto. – ljpv14

+0

Voglio dire che dovresti passare i parametri nell'URL e impostare il tipo su GET. Per favore, controlla la mia risposta aggiornata –

+0

Finalmente posso chiamare il mio webmethod. Perché non si ferma alla linea in cui ho impostato un punto di interruzione? Significa che non sta procedendo al webmethod? – ljpv14