2008-10-04 9 views
12

Quiero volver a crear la devolución de datos del panel de actualización sin utilizar un panel de actualización para hacer la devolución de datos. ¿Cuál es el método genérico para hacer esto?¿Cómo puedo hacer una publicación onclientclick utilizando jQuery con asp.net

Por ejemplo, en Stackoverflow, cuando vota hacia arriba o hacia abajo en una pregunta, hace una devolución de datos para actualizar la base de datos y apostaría que no usaron un panel de actualización.

¿Qué tengo?

Tengo una tabla con los datos de la tabla. Cuando hago clic en el elemento td como una columna completa, quiero hacer una actualización de la base de datos y también actualizar una vista de cuadrícula en la página misma. La vista de cuadrícula muestra todos los elementos actualmente seleccionados en la tabla porque se actualizó a través de "nuestro método".

Buscando un buen método genérico que podría utilizar para una gran cantidad de devoluciones de datos asincrónicas sin el panel de actualización.

Respuesta

17

La forma en que funciona Stack Overflow difiere en dos aspectos importantes de ese artículo de CodeProject.

  • desbordamiento de pila está haciendo su petición AJAX en contra de una acción del controlador ASP.NET MVC, no una página ASPX independiente. Puede considerar esto como el análogo MVC de un método de página ASP.NET AJAX. En ambos casos, el método ASPX se retrasará en términos de rendimiento.

  • La solicitud AJAX de Stack Overflow devuelve un resultado serializado JSON, texto llano no arbitrario o HTML. Esto hace que su manejo en el lado del cliente sea más estandarizado y generalmente más limpio.

Por ejemplo: cuando voté a esta pregunta se hizo una solicitud a XmlHttpRequest/preguntas/171000/voto, con un "voteTypeId" de 2 en los datos POST.

El controlador que maneja la solicitud añadió mi voto a una mesa en algún lugar y luego respondió con esta JSON:

{"Success":true,"NewScore":1,"Message":"","LastVoteTypeId":2} 

Gracias a esta información, este JavaScript se encarga de la actualización de la pantalla del lado del cliente:

var voteResult = function(jClicked, postId, data) { 
    if (data.Success) { 
    jClicked.parent().find("span.vote-count-post").text(data.NewScore); 
    if (data.Message) 
     showFadingNotification(jClicked, data.Message); 
    } 
    else { 
    showNotification(jClicked, data.Message); 
    reset(jClicked, jClicked); 

    if (data.LastVoteTypeId) { 
     selectPreviousVote(jClicked, data.LastVoteTypeId); 
    } 
    } 
}; 

Si está utilizando WebForms, el ejemplo de los métodos de página de llamada que encontró en mi blog está definitivamente en el estadio correcto.

Sin embargo, le sugiero que considere un servicio web para cualquier funcionalidad centralizada (como este ejemplo de votación), en lugar de métodos de página. Los métodos de página parecen ser un poco más fáciles de escribir, pero también tienen algunos inconvenientes de reutilización y tienden a proporcionar una ilusión de seguridad adicional que realmente no existe.

Este es un ejemplo de hacer la misma cosa que pueda encontrar, pero con los servicios web (los comentarios de esta entrada en realidad dirigido a la entrada que encontró):

http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/

+0

gracias por esto ... Aprecio tu blog también. –

+0

No hay problema. Espero eso ayude. –

+0

Quiero expresar una cosa más en esta respuesta. use métodos de página SI la solución no es para un sistema centralizado. –

2

Puede usar una llamada AJAX estándar para lograr esto. Cree una página .aspx que actualice la base de datos en su método Page_Load, y muestre toda la información deseada (como el valor DB actual después de la actualización) como XML. Luego haga una llamada AJAX a esa página usando jQuery.

También puede devolver un fragmento de HTML (es decir, un GridView actualizado) y utilizar jQuery para insertar el código HTML actualizado en la página actual.

Editar: Muestra 2 en esta página debe ser muy cercano a lo que quiere:
http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx

+0

Así es este el camino Stackoverflow probablemente ¿lo hace? –

+1

La respuesta de Dave Ward describe cómo funciona SO. – AaronSieb

2

Este link es lo que me pareció ser la mejor cosa que hacer y me permite utilizar javascript y métodos web .

Cuestiones relacionadas