2011-01-31 16 views
5

Si uso jQuery AJAX para llamar a un método de página ASP.NET específico, ¿cómo hacer que ese método devuelva un valor al método AJAX que lo llamó?jQuery-AJAX llamando al método de página ASP.NET. ¿Cómo devolver el valor a jQuery?

actualización

Mi situación es que tengo una aplicación web existente con muchos métodos existentes. Me gustaría poder utilizar jQuery para ejecutar algunos de estos métodos y luego actualizar la IU con los resultados. Mi mandato es mantenerme alejado de ASP.NET AJAX y seguir con jQuery. La administración está preocupada por el desarrollo continuo y el soporte con ASP.NET AJAX de Microsoft. Estoy de acuerdo con ellas.

Respuesta

1

Hay dos maneras de desollar a este gato (con el que estoy familiarizado).

  1. El "Camino .Net", que implica un método web y un gestor de scripts (ver aquí: http://geekswithblogs.net/frankw/archive/2008/03/13/asp.net-ajax-callbacks-to-web-methods-in-aspx-pages.aspx).

  2. El "Old Skool Way" que consiste simplemente en escribir una respuesta determinando lo que se llamó. Normalmente, utilizaría un marco como MVC, por lo que al ir al http://www.MyWebsite.com/Object/Method/Id, se puede volver a asignar a Object.Method (id).

Puede hacer esto sin un marco como MVC pero hace las cosas un poco más difíciles y, si vas por ese camino, que realmente debe utilizar un controlador de ASP.Net en lugar de una página real (ya que Don no necesita la sobrecarga de Aspx). Este es un archivo Ashx.

1

Con ASP.NET puro (sin mencionar WCF aquí) iría con un archivo de controlador (ASHX) y usaría JSON como formato de intercambio. No voy a entrar en los detalles de JSON (here es un comienzo decente), pero la idea es un controlador liviano en el servidor que genera el texto json y lo devuelve al cliente, que luego puede usar la estructura fácilmente en javascript.

Esto es obviamente un ejemplo simplificado, pero la esencia es que el JSON puede ser manejado por datos del servidor y consumido fácilmente por el javascript en el cliente.

servidor:

<%@ WebHandler Language="C#" Class="Handler" %> 

using System; 
using System.Web; 

public class Handler : IHttpHandler { 

    public void ProcessRequest (HttpContext context) { 
     context.Response.ContentType = "text/json"; 
     context.Response.WriteFile("~/myData.json"); 
    } 

    public bool IsReusable { 
     get { 
      return false; 
     } 
    } 
} 

cliente:

myData = 
     (function() 
     { 
      var json = null; 
      $.ajax({ 
       'async': false, 
       'global': false, 
       'url': "handler.ashx", 
       'dataType': "json", 
       'success': function (data) {  
        // this code is called when the 
        // data is returned from the server    
        json = data; 
       } 
      }); 
      return json;  
     } 
     )(); 

alert(myData.MyArray[0].MyProperty); 
+0

No estoy familiarizado con los tipos de "Manejador". ¿No podría el método AJAX simplemente ejecutar el método web estándar y obtener resultados? – webworm

+1

Un controlador ASP.Net es como una página ASPX, excepto que tiene una sobrecarga mucho menor y está diseñado para cosas como esta (piense también en feeds RSS). Puede usar jQuery para ejecutar un WebMethod (una de las sugerencias anteriores). El enfoque de mjmarsh es mucho más liviano y debe ser un poco más rápido ya que tiene menos sobrecarga que tratar no solo con un archivo ASPX sino también con la estructura de eventos .Net. – Kris

+1

@Kris: Eso no es correcto. Cuando solicita un "método de página" definido en una página de ASPX, no toca ningún ciclo de vida de la página de WebForms tradicional.De hecho, incluso tienen que ser métodos "estáticos", porque se ejecutan sin una instancia de la página que se está creando. Es una especie de abreviatura de caso especial para declarar un método ASMX "ScriptService" en línea en una página ASPX. –

Cuestiones relacionadas