none
Factoriser une div HTML RRS feed

  • Question

  • Bonjour,

    Je voudrais "factoriser" une div HTML afin qu'il soit utilisée dans plusieurs autres pages.

    Comment faire cela ?

    En particulier, voici la div que je voudrais placer dans plusieurs de mes pages

    <div id="google_translate_element">
    <script>
    function googleTranslateElementInit() {
     new google.translate.TranslateElement({
      pageLanguage: 'fr',
      layout: google.translate.TranslateElement.InlineLayout.HORIZONTAL
     }, 'google_translate_element');
    }
    </script>
    
    <script src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit"></script>
    </div>
    

    Merci de votre réponse.


    Alain
    samedi 5 février 2011 10:18

Réponses

  • Bonjour,

    Vous pouvez créer une classe dérivant de la classe WebControl et surcharger la méthode RenderContents. Cette méthode utilise un htmltextwriter. Le code ressemblerait à ça:

    public class DivGoogleTranslate: WebControl

    {

    public override RenderContents(HtmlTextWriter writer)

    {

    writer.RenderBeginTag(HtmlTextWriterTag.Script);

    writer.Write("function googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:'fr',layout:google.translate.TranslateElementLayout.HORIZONTAL],'google_translate_element');}");

    writer.RenderEndTag();

    writer.AddAttribute(HtmlTextWriterAttribute.Src, "//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");

    writer.RenderBeginTag(HtmlTextWriterTag.Script);

    writer.RenderEndTag();

    }

    }

     

    Par contre l'id de la div sera dynamique à cause du NamingContainer et vous ne le controlerez plus. (sauf si vous êtes en .Net 4.0).

    Une manière plus propre d'intégrer le javascript serait de réaliser un SciptControl mais pour une simple fonction c'est un peu lourd je trouve.

     

     


    Christophe Argento
    Architecte .Net/Consultant chez Ineat Conseil
    Blog: http://christopheargento.com
    • Marqué comme réponse AchLog dimanche 6 février 2011 21:34
    samedi 5 février 2011 11:50

Toutes les réponses

  • Bonjour,

    Vous pouvez créer une classe dérivant de la classe WebControl et surcharger la méthode RenderContents. Cette méthode utilise un htmltextwriter. Le code ressemblerait à ça:

    public class DivGoogleTranslate: WebControl

    {

    public override RenderContents(HtmlTextWriter writer)

    {

    writer.RenderBeginTag(HtmlTextWriterTag.Script);

    writer.Write("function googleTranslateElementInit(){new google.translate.TranslateElement({pageLanguage:'fr',layout:google.translate.TranslateElementLayout.HORIZONTAL],'google_translate_element');}");

    writer.RenderEndTag();

    writer.AddAttribute(HtmlTextWriterAttribute.Src, "//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit");

    writer.RenderBeginTag(HtmlTextWriterTag.Script);

    writer.RenderEndTag();

    }

    }

     

    Par contre l'id de la div sera dynamique à cause du NamingContainer et vous ne le controlerez plus. (sauf si vous êtes en .Net 4.0).

    Une manière plus propre d'intégrer le javascript serait de réaliser un SciptControl mais pour une simple fonction c'est un peu lourd je trouve.

     

     


    Christophe Argento
    Architecte .Net/Consultant chez Ineat Conseil
    Blog: http://christopheargento.com
    • Marqué comme réponse AchLog dimanche 6 février 2011 21:34
    samedi 5 février 2011 11:50
  • Ok, merci de votre réponse Christophe.

    J'avais pensé à placer mon code dans une page spécifique et inclure celle-ci dans chaque page où son usage est nécessaire.

    Est-ce possible ?

    Merci

     


    Alain
    samedi 5 février 2011 17:21
  • C'est possible avec un ascx mais vous perdez la réutilisabilité dans un projet différent. Et je trouve ça beaucoup moins propre pour ce genre de contrôles.
    Christophe Argento
    Architecte .Net/Consultant chez Ineat Conseil
    Blog: http://christopheargento.com
    samedi 5 février 2011 17:23
  • Merci beaucoup pour votre avis.

    Bien cordialement

     


    Alain
    samedi 5 février 2011 18:44