llamando a un método de página ascx usando jquery

Sé que puedo llamar a un método de página con jquery usando la siguiente syntax

$.ajax({ type: "POST", url: "Default.aspx/GetDate", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { // Replace the div's content with the page method's return. $("#Result").text(msg.d); } }); 

Esto funciona para páginas aspx pero ¿es posible con páginas ascx ? (controles web)

Lo he intentado durante media hora y como no puedo hacerlo funcionar, me pregunto si es posible.

Nota: Para que quede claro, cuando trato de llamar a la página de ascx estoy actualizando la URL en jquery 🙂

No, porque los controles ascx no representan una URL real a la que se pueda acceder desde una máquina cliente. Son puramente del lado del servidor destinados a incrustar en otras páginas.

Lo que quizás desee hacer es tener una página aspx que proporcione el mismo fragmento de html que tiene actualmente en su archivo ascx. Una página aspx no necesita necesariamente proporcionar un documento html completo ( etc.), simplemente puede hacer que el usuario controle lo que le interesa.

Utilizamos esta técnica todo el tiempo con el plugin ingrid, que requiere una url de callback para los contenidos de la tabla.

No creo que sea posible solicitando directamente el archivo ascx, es decir, suministrando “MyControl.ascx” como el parámetro url a $ .ajax (..). El archivo ascx no está expuesto directamente por el servidor web.

Puede, según creo, proporcionar la url de la página aspx que contiene el control de usuario, es decir, si una instancia de MyControl.ascx vive en MyPage.aspx, debe proporcionar “MyPage.aspx” como el parámetro url. Sin embargo, parece que eso podría vencer el propósito de lo que estás tratando de lograr.

EDITAR: Lo que Clyde dijo a continuación parece una buena idea. Estoy haciendo algo similar al incluir el control ascx en una página cuyo trabajo es más o menos solo para alojarlo para acceder desde el script del lado del cliente.

No creo que sea posible, ya que los controles del usuario no están destinados a ser accesibles externamente (fuera de una página). Sugiero simplemente usar un servicio de script (un servicio web).

¿Qué hay de crear el método en la página .aspx que hace lo que necesita con la información del control? Sé que la gente regresa y el cuarto en lo que se supone que los controles contienen o no contienen, pero si el control solo contiene propiedades y objetos, creo que tener la función en la página .aspx podría funcionar para usted. Obviamente, habría muchas concesiones.

Este es un ejemplo de renderizar un control de usuario a través de una llamada al servicio web jQuery .

Aquí hay una forma de evitar la limitación de tener solo métodos de página (ScriptMethod) disponibles en páginas ASPX. Este ejemplo crea un proxy usando una clase base de página y un atributo especial para decorar los métodos en el código subyacente de su página ASCX y tenerlos accesibles a través del cliente.

Crear un método de página (ScriptMethod) dentro de un control de usuario ASCX utilizando AJAX, JSON, clases base y reflexión

Crearía un controlador genérico (.ashx) que carga el control y escribe su HTML renderizado en la respuesta.

Puede escribir el método GetDate () en Default.aspx u otro archivo aspx Y PUEDE LLAMAR ESTE MÉTODO DESDE .ASCX FILE .

Ex:

En UserControl.ascx:

 $.ajax({ type: "POST", url: "Default.aspx/GetDate", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function(msg) { // Replace the div's content with the page method's return. $("#Result").text(msg.d); } 

});

En Default.aspx.cs:

Public void GetDate() //Public static void { //your code here }