IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

[C#] e-mail à partir des pages générées.


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Par défaut [C#] e-mail à partir des pages générées.
    Pour le site que je développe actuellement je dois implémenter une fonctionnalité type 'envoyer cette page à un ami', mais il faut que j'envoie réellement la page et non pas un simple lien.
    Y a-t-il un moyen de récupérer le code html généré pour en faire le corps de mon email ? J'ai vaguement testé en utilisant des iframes, mais ça n'a pas marché. Et google tout ce qu'il me trouve c'est hébergements pas chers :/

    Merci d'avance pour vos réponses.

    Procto

  2. #2
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    En .Net, y a tout ce qu'il te faut pour capturer le code html d'une page

    Google, 15 sec + tard =>
    1. System.Net.WebClient WC = new System.Net.WebClient();
    2. System.IO.Stream s = WC.OpenRead("http://www.xxxx.com/yyyy.aspx");
    3. System.IO.StreamReader sr = new System.IO.StreamReader(s);
    4.
    5. string CodeSource = sr.ReadToEnd();

  3. #3
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Par défaut
    Oui merci.

    Peut-être qu'on ne recherche pas la même chose et c'est pour ça que je ne trouve pas.
    Ta solution marche, sauf que en fait je ne veux pas récupérer le code source de la page mais le code HTML que voit le client une fois la page exécutée. Je pense que mon client n'a pas envie que l'ami de son client voit tout plein de DataBinds partout.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Procto, le code que t'a donné lutecefalco te permet de récupérer le code HTML de la page une fois générée et non pas son code source bien évidemment...

  5. #5
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Par défaut
    Citation Envoyé par Sphax
    Procto, le code que t'a donné lutecefalco te permet de récupérer le code HTML de la page une fois générée et non pas son code source bien évidemment...
    Ce n'est pas ce que j'ai quand je teste
    J'ai vraiment les trucs databind.

    Ceci dit, c'est pas un peu bête de reparser la page alors que je suis sur la page elle même ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Je suis trés étonné, a priori la classe WebClient se comporte en fait comme un browser, et je ne vois pas comment elle pourrait te retrouner le code source de ta page aspx.

    Par ailleurs je viens de faire le test et ça fonctionne trés bien chez moi : je récupere le code HTML généré par la page, pas le code source lui meme...

    PS : non ce n'est pas si bete que ça qd tu y penses de regénérer la page alors que tu es dessus, vu que pendant l'exécution de la page, tu ne peux pas accéder à son "rendu" HTML... Normal, la page n'a pas fini de s'exécuter...

    A moins de reussir a trouver une bidouille javascript coté client pour qu'il te renvoie le code HTML d'une maniere ou d'une autre (genre dans un champ caché), je vois pas d'autre solution.

  7. #7
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par Sphax
    Je suis trés étonné, a priori la classe WebClient se comporte en fait comme un browser, et je ne vois pas comment elle pourrait te retrouner le code source de ta page aspx.

    Par ailleurs je viens de faire le test et ça fonctionne trés bien chez moi : je récupere le code HTML généré par la page, pas le code source lui meme...

    PS : non ce n'est pas si bete que ça qd tu y penses de regénérer la page alors que tu es dessus, vu que pendant l'exécution de la page, tu ne peux pas accéder à son "rendu" HTML... Normal, la page n'a pas fini de s'exécuter...

    A moins de reussir a trouver une bidouille javascript coté client pour qu'il te renvoie le code HTML d'une maniere ou d'une autre (genre dans un champ caché), je vois pas d'autre solution.
    Si si tu peux récupérer le rendu HTML avant qu'il soit envoyé au client

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Août 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2003
    Messages : 835
    Par défaut
    Au temps pour moi alors , j'imagine que ce doit etre dans un des derniers evenements de la page, genre le render ou encore plus loin. Dans ce cas merci de nous donner plus de précision lutefalco , je pense que ça arrangerait bien Procto, et c'est qd meme effectivement plus joli que d'instancier un WebClient pour regénérer la page .

  9. #9
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Par défaut
    En fait oui ça marche, au temps pour moi (excuse-moi lutecefalco)
    Je faisais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.IO.StreamReader sr = new System.IO.StreamReader(WC.OpenRead(Request.MapPath("MaPage.aspx")));
    Plutôt que ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.IO.StreamReader sr = new System.IO.StreamReader(WC.OpenRead(urlDeMaPage));
    Ceci dit, ça marche à priori, mais pas à fortiori, car je me bouffe une exception : System.Net.WebException: Tentatives de redirection automatique trop nombreuses.

    J'imagine que ça vient du faite que mon WebClient n'est pas identifié et donc, se fait renvoyer à la page de login jusqu'à ce que ça explose.

    J'ai vu qu'il y avait un moyen de récupérer le rendu avant qu'il ne soit envoyé au client, mais apparemment ça se passe dans le global et c'est pas vraiment pratique.

  10. #10
    Expert confirmé
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Par défaut
    En mettant un ID à ton body, tu pourras y accéder en code-behindf et récupérer le innerHTML de celui (Controle HtmlGenericContainer).

  11. #11
    Membre averti
    Inscrit en
    Avril 2005
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 28
    Par défaut
    Citation Envoyé par Ditch
    En mettant un ID à ton body, tu pourras y accéder en code-behindf et récupérer le innerHTML de celui (Controle HtmlGenericContainer).
    J'ai essayé mais il me sort une exception, en me disant que le contenu de mon body n'est pas de type littéral... à vrai dire je n'ai pas su quoi faire.

    En creusant dans les grottes oubliées de google j'ai trouvé une astuce de cradingue (il faut redéfinir la méthode Render) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    StringBuilder sb = new StringBuilder();
    StringWriter swr = new StringWriter(sb);
    HtmlTextWriter hwr = new HtmlTextWriter(swr);
    base.Render(hwr);
    string html = sb.ToString();
    writer.Write(html);
    ....
    Après on peut faire ce qu'on veut avec html.
    On peut aussi gérer des postbacks à l'intérieur, etc...

    J'espère que ça aidera des gens dans le futur autant que ça m'a aidé.

    Procto

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/10/2011, 20h40
  2. Réponses: 1
    Dernier message: 23/03/2011, 14h37
  3. Générer un mail à partir des données d'un formulaire
    Par MortDansLAme dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 24/05/2007, 15h14
  4. [Mail] Réécriture des adresses des pages.
    Par yanice dans le forum Langage
    Réponses: 5
    Dernier message: 26/05/2006, 10h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo