2012-05-21 18 views
8

Tengo un default.aspx.cs que contiene mi webmethod para llamar y tengo mi archivo js que contiene mi jquery ajax. No puedo llamar al método web.Llamando al archivo webmethod ina aspx.cs usando jquery ajax

Aquí está mi 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(); 
    } 

Y aquí es mi archivo 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"); 
} 

Usted puede notar que estoy alertando a mis datos para asegurar que tengo la valores correctos para enviar a mi webmethod. Pero al igual que dije, falla al llamar mi webmethod y no procede a mi función de éxito dentro de mi ajax. ¡Ayuda! ¡Gracias! :)

Respuesta

19

Usted WebMethod necesita ser static.

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

Hay un error cuando pongo estática en mi webmethod. Error Se requiere una referencia de objeto para el campo no estático, el método o la propiedad 'SearchMember_Updated.Default.Grid1D' – ljpv14

+0

+1. @ ljpv14, así que no lo mencione ... No tiene sentido actualizar alguna IU en el método web en su caso, ya que no hay una página HTML correspondiente. –

+1

No puede enlazar un control de servidor en un método web. Úselo para cargar/guardar datos desde/hacia el servidor. Me temo que tendrá que cambiar esa lógica –

1

intenta establecer type a "GET" y enviar los parámetros de la URL en lugar de datos

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

Lo siento pero no entendí lo que acaba de decir. – ljpv14

+0

Quiero decir que debe pasar los parámetros en la URL y establecer el tipo en GET. Por favor revise mi respuesta actualizada –

+0

Finalmente puedo llamar a mi webmethod. ¿Por qué no se detiene en la línea donde establezco un punto de interrupción? ¿Significa que no está procediendo a la webmethod? – ljpv14

Cuestiones relacionadas