Recuperer le rendu d'un controle

Soyez le premier à donner votre avis sur cette source.

Snippet vu 18 282 fois - Téléchargée 31 fois

Contenu du snippet

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 / Exemple :


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 :)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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.
Messages postés
5
Date d'inscription
mercredi 16 février 2005
Statut
Membre
Dernière intervention
8 février 2007

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.
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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
Messages postés
5
Date d'inscription
mercredi 16 février 2005
Statut
Membre
Dernière intervention
8 février 2007

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
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
27
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.
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.