2009-02-23 15 views
24

sé que puedo llamar a un método de página con jQuery utilizando la siguiente sintaxisllamada al método de la página ascx usando jQuery

$.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 aspx páginas pero ¿es posible con ascx páginas? (controles web)

Lo he estado intentando durante aproximadamente 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 ascx Yo soy actualizar la dirección URL en jQuery :)

Respuesta

26

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

Lo que podría querer 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 (< html> < cuerpo> etc.), simplemente puede representar el control del usuario que le interesa.

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

+0

Debo añadir que la forma en que proporciona ese fragmento es incluyendo el control en la página, en lugar de duplicar el código. –

+0

Si el control también se usa en el servidor, estoy totalmente de acuerdo. Sin embargo, si el propósito es puramente utilizarlo como una devolución de llamada de jQuery, y el control nunca se usa en línea en otra página aspx en el lado del servidor, entonces eso no es más que un desorden innecesario. En ese caso, simplemente ponga el código en la página aspx. – Clyde

2

No creo que sea posible, ya que los controles de usuario no son destinado a ser accesible externamente (fuera de una página). Sugiero simplemente usar un servicio de script (un servicio web).

4

No creo que sea posible al solicitar el archivo ascx directamente - 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.

+0

¿La primera parte aquí funciona? Tengo que enviar datos JSON a una función en un archivo ascx.cs y preferiría no tener que refactorizar este código y el código ascx en su página que contiene aspx. –

2

¿Qué tal 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.

1

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

2

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.

Creating a Page method (ScriptMethod) within an ASCX user control using AJAX, JSON, base classes and reflection

+4

Parece que tu enlace está muerto. –

0

Puede escribir método GetDate() en Default.aspx o un otro archivo aspx Y podrá llamar a dicho método desde Ascx ARCHIVO.

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 }

Cuestiones relacionadas