2009-08-25 8 views

Respuesta

22

Fundamentalmente, Client Callbacks y Ajax Página Métodos están haciendo lo mismo. Usan un objeto XMLHttpRequest para enviar una solicitud (normalmente asíncrona) a alguna URL, obtienen los resultados de esa solicitud y luego ejecutan un método de devolución de llamada que usted ha proporcionado (devolución de llamada con una minúscula c), pasando los resultados de la solicita tu método

Una vez dicho esto, hay una gran diferencia entre los dos enfoques:

  • Página Métodos se implementan como métodos estáticos en su página. Su clase de página es solo un contenedor conveniente para estos métodos, que realmente podría alojarse en cualquier lugar (un servicio web, un HttpHandler personalizado, etc.). Como nunca se construirá ninguna instancia, el cliente no tiene que enviar datos de ViewState y Asp.Net no tiene que ejecutar el ciclo de vida de Page. La otra cara de la moneda es que no tiene acceso a los métodos y propiedades de la instancia de su clase Page. Sin embargo, en muchos casos puede solucionar esto refactorizando métodos de instancia en métodos estáticos. (Consulte this article para obtener más información.)

  • Las devoluciones de clientes se implementan como métodos de instancia en su página. Tienen acceso a otros métodos de instancia en su página, incluidas las cosas almacenadas en ViewState. Esto es conveniente, pero tiene un precio: para construir la instancia Page, el cliente tiene que enviar una cantidad relativamente grande de datos al servidor y tiene que ejecutar una buena parte del ciclo de vida de la página. (. This article has a nice diagram que muestra qué partes)

Aparte de eso, el costo de la que fueron creados varía bastante y los clientes los utilizan de manera diferente:

  • cliente devoluciones de llamada requieren una buena cantidad de Andamios idiosincrásicos código que está íntimamente acoplado a Asp.Net (como se muestra en el enlace de arriba). Dadas las las alternativas mucho más fáciles que tenemos ahora, me siento tentado de decir que esta tecnología es obsoleta (para un nuevo desarrollo).

  • métodos página de llamada utilizando ScriptManager requiere menos configuración de cliente de devoluciones de llamada: sólo tienes a estallar una ScriptManager en su página , establecer EnablePageMethods = true, luego acceder a sus métodos de página a través del proxy al proxy PageMethods.

  • Llamar a los métodos de página usando jQuery solo requiere que vincule la biblioteca jQuery (y la familiaridad con jQuery, por supuesto).

Yo prefiero usar jQuery para acceder a los métodos de página porque es independiente de la infraestructura de servidor y expone la cantidad justa de los detalles de implementación, pero no deja de ser una cuestión de gusto. Si va con ScriptManager, su proxy hace que las llamadas al método de la página sean un poco más fáciles para los ojos, lo que algunos podrían considerar más importante.

+0

Gracias por la respuesta. ¿Pueden los métodos de página ser no estáticos? He usado devoluciones de llamada antes y no había ningún requisito para que sean estáticas. De esta manera, podría tener acceso a los métodos de clase base. En Page Methods, no puedo. – Nick

+0

¡Es un placer! En cuanto a los métodos de página, deben ser estáticos porque Asp.Net no creará (y no puede) instancias de su clase de página al ejecutar un método de página. Este artículo hace un buen trabajo explicando por qué (y por qué es generalmente deseable): http://encosia.com/2008/04/16/why-do-aspnet-ajax-page-methods-have-to-be-static /. Habiendo dicho eso, fue un gran descuido no discutir eso en mi respuesta. Actualizaré la respuesta para incluir esa información. –

+0

Me gustaría poder votar dos veces esa respuesta. Gracias Jeff! –

4

Yo diría que hay diferencias, pero tienden a decir que lo hagas de la forma en que te sientas más cómodo.

He utilizado ambos enfoques, y tener llamadas jQuery desde la página es generalmente más rápido. Escribo un manejador de ashx que hace el trabajo que necesita la llamada jquery (consultar la base de datos, procesar algo, etc.) y llamarlo desde la página. No utilizaría una página aspx para una llamada a jQuery, porque está enviando mucha información que no necesitará en absoluto. La diferencia/beneficio de usar una llamada Ajax.Net es que no necesita construir otra página para procesar cosas, puede usar los mismos eventos de página para hacerlo.

Por ejemplo, si necesita completar una segunda lista desplegable utilizando el valor seleccionado en una primera, podría usar Ajax.Net para llamar a SelectedIndexChanged en el código de la página y cuando se apague, vaya a Page_Load, SelectedIndexChanged, Page_PreRender y así sucesivamente. En el caso del método, consultarías el db y llenarías el segundo ddl.

Con jQuery eso podría ser un poco diferente. Usted hace su llamada a un manejador de ashx, el manejador es solo un método de servidor que hace la magia y devuelve datos en la forma que desea (json, matriz de cadenas, xml, etc.) y llena el segundo ddl usando javascript. Como les dije antes, algunas personas no se sienten demasiado cómodas con el código del Cliente y tienden a hacerlo en el servidor, pero siempre les digo que deben usar la herramienta correcta para el trabajo correcto, así que conozcan sus herramientas y aplícalos sabiamente.

Si quiere saber más sobre ASP.Net, ASHX handlers y jQuery, puede leer un post que escribí al respecto.

espero que helps.-

0

Son esencialmente lo mismo. Tanto :

  1. instalación de un servicio web para usted que el javascript para el control puede llamar.
  2. Proporcione asincrónico respons e sin involucrar el ciclo de vida de la página.

son diferentes:

  1. Métodos Página simplemente requieren que decorar un método estático con un atributo y ya está. El resto de la magia es manejada por Manejadores y Módulos HTTP. Las devoluciones de llamada requieren que implemente algunas interfaces y maneje los controladores de eventos asincrónicos usted mismo. Encuentro que son un poco más dolorosos.
  2. Las devoluciones de llamada solo funcionan con ciertos controles. La llamada a los métodos de la página le permite afectar cualquier control a través de JavaScript personalizado.Las rellamadas tienen una pequeña ventaja aquí ya que el comportamiento del lado del cliente ya está escrito y arreglado. Sin embargo, con los métodos de página tiene más flexibilidad (el comportamiento del lado del cliente lo determina usted).

Existen algunas otras diferencias, pero estas son las básicas. Según entiendo, las devoluciones de llamadas de los clientes tienden a funcionar tan bien como los métodos de Página, pero no se usan tanto porque solo están disponibles en ciertas situaciones, mientras que un Método de Página siempre es una vía válida.

En cuanto a la pregunta ScriptManager vs. JQuery, mi sensación aquí es sobre el gusto más que nada. Me gusta la sintaxis de JQuery y creo que funciona mejor, pero en el gran esquema de cosas, lo más costoso es XmlHttpRequest ... después de eso, la ejecución del javascript probablemente sea insignificante a diferencia de eso.

Cuestiones relacionadas