web-dev-qa-db-fra.com

appeler une méthode de page ascx en utilisant jquery

Je sais que je peux appeler une méthode de page avec jquery en utilisant la syntaxe suivante

$.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);
  }
});

Cela fonctionne pour aspx pages mais est-ce possible avec ascx pages? (contrôles Web)

Je l’essaye depuis une demi-heure environ et comme je ne peux pas le faire fonctionner, je me demande même si c’est possible.

Note: Juste pour être clair, quand j'essaie d'appeler la page ascx, je suis met à jour l'URL dans jQuery :)

24
codette

Non, car les contrôles ascx ne représentent pas une URL réelle accessible à partir d'un ordinateur client. Ils sont purement côté serveur et doivent être intégrés dans d'autres pages.

Ce que vous voudrez peut-être faire, c’est simplement d’avoir une page aspx qui fournit le même extrait de code HTML que vous avez actuellement dans votre fichier ascx. Une page aspx n'a pas nécessairement besoin de fournir un document HTML complet (<html> <body> etc.), elle peut simplement restituer le contrôle utilisateur qui vous intéresse.

Nous utilisons cette technique tout le temps avec le plugin ingrid, qui nécessite une URL de rappel pour le contenu de la table.

26
Clyde

Je ne pense pas que ce soit possible en demandant directement le fichier ascx - c'est-à-dire. fournissant "MyControl.ascx" comme paramètre d'URL à $ .ajax (..). Le fichier ascx n'est pas exposé directement par le serveur Web.

Je pense que vous pouvez fournir l’url de la page aspx contenant le contrôle utilisateur - c’est-à-dire. Si une instance de MyControl.ascx se trouve sur MyPage.aspx, vous devrez fournir "MyPage.aspx" comme paramètre url. Il semble que cela pourrait aller à l'encontre de l'objectif de ce que vous essayez d'accomplir.

EDIT: Ce que Clyde a dit ci-dessous semble être une bonne idée. Je fais quelque chose de similaire moi-même en incluant le contrôle ascx sur une page dont le travail consiste plus ou moins à l'héberger pour pouvoir y accéder à partir d'un script côté client.

4
Rex Miller
2
Dave Ward

Voici un moyen de contourner la limitation consistant à ne disposer que de méthodes de page (ScriptMethod) disponibles dans les pages ASPX. Cet exemple crée un proxy en utilisant une classe de base de page et un attribut spécial pour décorer les méthodes dans le code-behind de votre page ASCX et les rendre accessibles via le client.

Création d'une méthode de page (ScriptMethod) dans un contrôle utilisateur ASCX à l'aide d'AJAX, JSON, des classes de base et de la réflexion

2
Chad Scharf

Je ne pense pas que ce sera possible, car les contrôles utilisateur ne sont pas censés être accessibles de l'extérieur (en dehors d'une page). Je suggère simplement d'utiliser un service de script (un service Web).

2
eglasius

Qu'en est-il de la création de la méthode sur la page .aspx qui fait ce qu'elle doit avec les informations du contrôle? Je sais que les gens reviennent en quatrième position sur ce que les contrôles sont supposés contenir ou non, mais si le contrôle ne contenait que des propriétés et des objets, je penserais que la fonction dans la page .aspx pourrait fonctionner pour vous. De toute évidence, il y aurait beaucoup de compromis.

2
RSolberg

Je créerais un gestionnaire générique (.ashx) qui charge le contrôle et écrit son code HTML rendu dans la réponse.

1
hunter

Vous pouvez écrire la méthode GetDate () dans Default.aspx ou dans un autre fichier aspx ET VOUS POUVEZ APPELER CETTE MÉTHODE À PARTIR DE .ASCX FILE .

Ex:

Dans 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);
}

});

Dans Default.aspx.cs:

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

0
Chưa biết