2010-01-25 19 views
7

Chicos, necesito ayuda. Tengo un sitio web ASP.NET y un control personalizado (vamos a llamarlo myControl) en él. Necesito llamar a un método en este control con AJAX. Estoy publicando una llamada jaja desde JavaScript (jQuery) a C# WebMethod. Esto funciona bien, pero no puedo acceder a myControl en un WebMethod estático. ¿Alguna idea de cómo resolver este problema?Accede al control ASP.NET desde static [WebMethod] (JS ajax call)

versión corta: llamada AJAX de JS para C# WebMethod funciona ->* aquí (en este método) Tengo que llamar a un método en mi control personalizado que es inaccesible a causa del tipo de método estático *

[WebMethod] 
public static List<CustomListControl.IListItem> GetListItems() 
{ 
    // CAN'T GET TO MY CONTROL - need to return myContorl.Items; 
    return null; 
} 
+0

Posible duplicado de [Cómo obtener controles en el método web estático] (https://stackoverflow.com/questions/8967763/how-to-get-controls-in-static-web-method) –

Respuesta

5

Bueno, ese no es el enfoque correcto. En el nivel de método de servicio web, no puede ver nada sobre la estructura de la página. En este método, solo puedes cargar tu lista de elementos y devolverla. El lugar donde esta lista está vinculada no es asunto de GetListItems.

Puede gestionar la visualización de los elementos implementando una función de devolución de llamada (consulte http://mattberseth.com/blog/2007/06/aspnet_ajax_invoke_a_static_me.html por ejemplo) o utilizando el enfoque UpdatePanel.

+0

No estoy seguro que nos entendemos :) Debo implementar una lista sincronizada (la lista del cliente debe ser la misma que la lista en un servidor) así que cada cambio debe ser enviado al servidor. Por ejemplo, quiero eliminar algún elemento con ajax - el usuario elimina un elemento en una lista y ajax llama al método de control personalizado que elimina este elemento en la lista en el servidor. [WebMethod] debería ser como un proxy o mediador: JS ajax calls * .aspx method -> este método llama a un método en customControl – Heko

+0

Escribí erróneamente sobre un método de servicio web pero eso no cambia el argumento :). Siempre que use un WebMethod, simplemente no puede acceder a sus controles en ese nivel. Puede administrar el objeto Contexto, la Sesión, etc., o llamar a una biblioteca externa, pero eso es todo.
Solo tiene dos formas de hacer lo que desea:
1 - Use un UpdatePanel (eliminando la llamada JQuery). Con esta solución puede administrar su control desde el método como lo hace en un escenario de devolución completo. 2 - Inyecte el resultado del método web en el marcado existente. – mamoo

+0

¡Gracias! Lo intentaré;) – Heko

Cuestiones relacionadas