2009-07-24 10 views
10

¿Cómo hago para llamar a un método en una página de formulario web ASP.NET utilizando el método getJSON en jQuery?Uso del método getJSON de jQuery con un formulario web ASP.NET

La meta es la siguiente:

  1. usuario hace clic en un elemento de lista
  2. El valor se envía al servidor
  3. servidor responde con lista con las cosas, con el formato usando JSON
  4. Rellenar secundaria box

No quiero usar un UpdatePanel, lo he hecho cientos de veces usando el Framework ASP.NET MVC, ¡pero no puede resolverlo usando Web Forms!

Hasta ahora, puedo hacer todo, incluso llamar al servidor, simplemente no llama al método correcto.

Gracias,
Kieron

Algunos código:

jQuery(document).ready(function() { 
    jQuery("#<%= AreaListBox.ClientID %>").click(function() { 
     updateRegions(jQuery(this).val()); 
    }); 
}); 

function updateRegions(areaId) { 
    jQuery.getJSON('/Locations.aspx/GetRegions', 
     { areaId: areaId }, 
     function (data, textStatus) { 
      debugger; 
     }); 
} 

Respuesta

24

Aquí está un ejemplo minimalista que esperemos que empezar:

<%@ Page Language="C#" %> 
<%@ Import Namespace="System.Web.Services" %> 

<script runat="server"> 
    [WebMethod] 
    public static string GetRegions(int areaId) 
    { 
     return "Foo " + areaId; 
    } 
</script> 

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>jQuery and page methods</title> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> 
</head> 
<body> 
    <script type="text/javascript"> 
    $(function() { 
     var areaId = 42; 
     $.ajax({ 
      type: "POST", 
      url: "Default.aspx/GetRegions", 
      data: "{areaId:" + areaId + "}", 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function(data) { 
       alert(data.d); 
      } 
     }); 
    }); 
    </script> 
</body> 
</html> 
0

me pellizca su código un poco. Agregué la salida del lado del servidor del ClientID al método updateRegions para pasarlo. Y cambié su método getJSON para pasar la URL con un parámetro de cadena de consulta (en lugar de datos separados) y la función de devolución de llamada.

jQuery(document).ready(function() { 
    jQuery("#<%= AreaListBox.ClientID %>").click(function() { 
     updateRegions(<%= AreaListBox.ClientID %>); 
    }); 
}); 

function updateRegions(areaId) { 
    jQuery("h2").html("AreaId:" + areaId); 

    jQuery.getJSON("/Locations.aspx/GetRegions?" + areaId, 
     function (data, textStatus) { 
      debugger; 
     }); 
} 

¡Avísame si eso funciona!

0

También puede utilizar un getJSON, pero se debe alterar el WebMethod en ese caso. Debe decorarlo con:

[WebMethod(EnableSession = true)]  
[ScriptMethod(UseHttpGet =false, ResponseFormat = ResponseFormat.Json)] 

Hacer un get puede no ser lo que desea.

Cuestiones relacionadas