Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RECUPERER LE RENDU D'UN CONTROLE


Information sur la source

Catégorie :Chaînes de caratères Source .NET ( DotNet ) Classé sous : render, control, ajax, clientcallback, callback Niveau : Débutant Date de création : 07/05/2005 Date de mise à jour : 05/07/2005 16:03:08 Vu : 12 781

Note :
8,5 / 10 - par 2 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note


Description

Dans certains cas, il est interressant de récuperer le rendu, c'est à dire le code html, qu'un controle génére.

Je me suis servis de cette astuce, dans ma source sur le clientCallBack (http://www.aspfr.com/code.aspx?id=31245) en effet, lors du retour coté client du CallBack, je ne peux pas ecrire directement du HTML dans la page, mais je dois renvoyer une string, puis du javascript ecrit le code HTML dans la page.

Il existe aussi plein d'autres cas pour lesquels ca devrait servir.

Le fonctionnement du code n'a rien d'extraordinaire, j'ecris le rendu dans un stringwriter via la méthode RenderControl de l'objet Control
 

Source

  • Dim sw As New System.IO.StringWriter()
  • Dim htw As New HtmlTextWriter(sw)
  • Me.LeControl.RenderControl(htw) 'avec LeControl, le control que vous avez bien sur instancié
  • htw.Flush()
  • return sw.ToString()
        Dim sw As New System.IO.StringWriter()
        Dim htw As New HtmlTextWriter(sw)
        Me.LeControl.RenderControl(htw) 'avec LeControl, le control que vous avez bien sur instancié
        htw.Flush()
        return sw.ToString()

Conclusion

Des problèmes, des remarques ?

la section commentaire est la pour ca :)
 

Historique

05 juillet 2005 16:03:09 :
MAJ

Commentaires et avis

signaler à un administrateur
Commentaire de Jamesbound le 17/01/2006 19:40:35

Excellent! En plein ce que je cherchais Merci!!!

signaler à un administrateur
Commentaire de armoramour le 07/02/2007 01:31:37

Bonjour,

Testé avec une page construite en utilisant une page "master"... l'appel à RenderControl provoque une erreur de type "il faut que le contrôle soit inclus dans un form avec runat=server"...

Je n'arrive pas à contourner ce problème.

Bien à vous

signaler à un administrateur
Commentaire de jesusonline le 08/02/2007 11:40:12 administrateur CS

Bonjour il suffit simplement de mettre ton controle dans une balise form, sinon cherche sur ce site j'ai déjà parlé de ce problème et expliqué comment cela fonctionne.

signaler à un administrateur
Commentaire de armoramour le 08/02/2007 11:53:59

Merci pour ta réponse. J'ai trouvé la solution cette nuit : je voulais récupérer le rendu "complet" d'un gridview, ce qui n'est pas possible (mais je ne le savais pas) le rendu de se contrôle se faisant ligne par ligne, aussi pour pallier à ce problème, j'ai construit un tableau dynamique à l'aide de "repeater" et j'obtiens exactement ce que je voulais : ne pas créer à la "main" ce qui existait déjà.

La méthode RenderControl avec GridView fonctionne ainsi tab.Rows(x).RenderControl(flux)

Merci encore Nath

signaler à un administrateur
Commentaire de jesusonline le 08/02/2007 12:00:33 administrateur CS

Hum, ce que tu me dis me parait étrange ... si tu fais un render sur un gridview je pense qu'il le fait complétement, il faudrais que je regarde d'avantages.

signaler à un administrateur
Commentaire de armoramour le 08/02/2007 16:43:24

Je n'arrive plus à retrouver "mes sources" microsoft confirmant que les gridview, formview, datalist donne le "rendu html" seulement ligne par ligne et sous forme <tr> <td> </td> </tr>...

J'ai testé et vérifié, c'est exactement le comportement que j'ai constaté, ligne par ligne le rendu html t'envoie un tableau (sans mise en form, tu demandes le rendu du gridview : tu lèves une exception le gridview doit être dans "la balise form runat=server" ... (il y est déjà !)

Aucun problème avec le repeater... ça fonctionne parfaitement.

Si tu trouves la solution pour le gridview. Fais moi signe Merci

Nath

signaler à un administrateur
Commentaire de jesusonline le 08/02/2007 17:03:08 administrateur CS

OK, je viens de comprendre ... il suffit simplement de surcharger la méthode VerifyRenderingInServerForm de la page (merci Reflector :-)) tu peux en savoir plus ici : http://blogs.codes-sources.com/cyril/archive/2005/10/05/11985.aspx

signaler à un administrateur
Commentaire de armoramour le 08/02/2007 17:17:40

Je ne suis pas certaine de récupérer mon "tableau mis en forme et avec les données liées" de cette façon : la récupération des contrôles étant faite en pre-init... m'enfin, lorsque j'aurais un peu de temps je vérifierai cette formule car elle est intéressante d'un point de vue "générique".

Merci à toi d'avoir pris le temps de "fouiller"

Nath.

signaler à un administrateur
Commentaire de jesusonline le 08/02/2007 17:34:31 administrateur CS

Il me semble bien que si, il suffit de faire un override sur le page_load et de le laisser vide, c'est cette méthode qui vérifie si le controle est dans un form.

override void VerifyRenderingInServerForm(){
    // on ne lance jamais d'exception !
}

Si tu regardes dans Reflector tu verras comment ca fonctionne et qui appelle la méthode, tu y decouvriras pleins de choses interessante.

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Control ajax Reorderlist [ par yanis7518 ] Salut a tous.Quelqu'un aurait-il deja utilisé le control ajax reorderlist??? parce que j'arrive pas a faire comme dans l'exemple donner sur le site.en ajax control toolkit et formview ca coince [ par jirap ] Bonjour,ValidatorCalloutExtender, nouveauté dans les objets d'AjaxControlToolkit fonctionne du feu de dieu, dans un formulaire simple. Mais dès qu'il comment installer le toolkit ? [ par hay2006 ] salut,je veins de decouvrir Ajax et ses possibiltés de merveilles avec son control toolkit.mais malheureusement, je ne sias pas comment l'installer po Comment récupérer les données des Control dynamique de mon PlaceHolder???? [ par yanis7518 ] Salut ALL!!!!Tout est dans le titre Voila un peu plus de détails. Je crée des control dynamiquement( texbox) dans un placeholdervoila mon code lorsque Problème avec dropDownList [ par falsification ] Bonjour tout le monde, j'ai un problème que je n'arrive pas à régler:j'ai une page qui possède un user control. dans ce user control, j'ai un datagrid Probleme de deploiement [ par spikeyz ] Bonjour,Je viens de finir de développer une application en .net 2.0 et Ajax 1.0 mais lors du déploiement sur le serveur qui ne possède pas encore Ajax Récupération variable de Session dans App_code (requete Ajax) [ par fabyrob ] Bonjour à tous, Je developpe une application en VS2005 c#.Afin de ne pas recharger la page entiere je fat une requete ajax pour mettre à jour mes ch Sys.WebForms.PageRequestManagerServerErrorException. [ par wally88 ] Bonjour, j'ai un site avec des controles "Ajax for aspx" et j'ai l'erreur suivante : PageRequestManagerServerErrorException: an unknow error occured w DragDropList avec le framework ASP.NET AJAX [ par abdelilahw3 ] Bonjour à tous,J'ai trouvé un bon exemple de DragDropList avec l'ancienne version de asp.net Ajax "atlas" (http://as DragnDrop [ par yanis7518 ] salut a tous j'aimerais savoir comment faire un drag n drop sur mon site asp.netj'ai un control listbox (asp.net) dans lequel j'ai plusieur valeur. je


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,484 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.