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 :

Controle ASCX et exécution de javascript via body onload ?


Sujet :

ASP.NET

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Par défaut Controle ASCX et exécution de javascript via body onload ?
    Bonjour,

    je convertie une web page en web user control mais je bloque sur un détail:

    Dans la web page, une méthode javascript est lancée via l'attribut <body onLoad="maFonction();" [...].

    Ma page fonctionne bien si j'intègre tout dans un fichier ascx et que je conserve l'attribut onLoad de la balise body.
    Mais j'aimerai que mon controle ascx mette lui-même à jour la balise body pour exécuter le javascript qu'il contient.

    Comment faire cela ? Mon but est que l'on ai juste à insérer le controle ascx sur une page web sans avoir à modifier quoi que ce soit d'autre manuellement (notamment la balise body dans mon cas).

    Merci d'avance pour toute aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    346
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 346
    Par défaut
    Bon, j'ai fait cela pour ceux que ça intéresse... S'il y avait plus simple, je suis preneur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    // Dans le Page_Load du User control:
     
    Control bodyCtrl = Page.FindControl("body");
            bool bodyFound = false;
            if (bodyCtrl != null)
            {
                HtmlGenericControl body = bodyCtrl as HtmlGenericControl;
                if (body != null)
                {
                    if ((body.Attributes["onLoad"] == null) || (!body.Attributes["onLoad"].Contains("InitializeMap()")))
                        body.Attributes["onLoad"] += "InitializeMap();";
                    if ((body.Attributes["onUnload"] == null) || (!body.Attributes["onUnload"].Contains("DisposeMap()")))
                        body.Attributes["onUnload"] += "DisposeMap();";
                    bodyFound = true;
                }
            }
     
            if (! bodyFound) 
            {
                foreach (Control ctrl in Page.Controls)
                {
                    Debug.WriteLineIf(
                        UpdateLiteralHtmlAttribute(ctrl as LiteralControl, "body", "onLoad", "InitializeMap();", true),
                        "Attribute 'onLoad' of body tag updated");
     
                    Debug.WriteLineIf(
                        UpdateLiteralHtmlAttribute(ctrl as LiteralControl, "body", "onUnload", "DisposeMap();", true),
                        "Attribute 'onUnload' of body tag updated");
                }
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    /// <summary>
        /// <para>Met à jour la propriété <see cref="LiteralControl.Text"/> de <paramref name="literal"/> en recherchant
        /// une balise HTML <paramref name="tagName"/> afin de lui ajouter/modifier l'attribut <paramref name="attributeName"/>.</para>
        /// <para>En cas d'echec de la modification du literal ou si ce dernier est <c>null</c>, retourne <c>false</c>.</para>
        /// </summary>
        /// <param name="literal">Contrôle literal à modifier</param>
        /// <param name="tagName">Nom de la balise HTML à rechercher dans le literal</param>
        /// <param name="attributeName">Nom de l'attribut HTML à mettre à jour</param>
        /// <param name="attributeValue">Valeur de l'attribut HTML</param>
        /// <param name="appendAttributeValue">Si <c>true</c> et que l'attribut existe déjà, 
        /// la nouvelle valeur est ajoutée à la valeur existante.
        /// Sinon, aucune modification.</param>
        /// <returns><c>true</c> si la méthode a réussi. <c>false</c> si le literal n'a pas été modifié.</returns>
        private bool UpdateLiteralHtmlAttribute(
            LiteralControl literal, 
            string tagName, 
            string attributeName, 
            string attributeValue, 
            bool appendAttributeValue)
        {
            bool success = false;
            tagName = tagName.ToLower();
            string attributeNamePart = " " + attributeName + "=";
     
            if ((literal != null) && (literal.Text.ToLower().Contains(tagName)))
            {
                int indexTagName = literal.Text.IndexOf(tagName, StringComparison.OrdinalIgnoreCase);
                Debug.Assert(indexTagName > -1, "Index de l'occurence '" + tagName + "' non trouvé dans le literal: " + literal.Text);
                int indexAttribute = literal.Text.IndexOf(attributeNamePart, indexTagName, StringComparison.OrdinalIgnoreCase);
                if ((indexAttribute > -1) && (appendAttributeValue))
                {
                    // l'atttribut existe déjà
                    int indexQuote = literal.Text.IndexOf("\"", indexAttribute);
                    if (indexQuote - (indexAttribute + attributeNamePart.Length) <= 1)
                        indexQuote = literal.Text.IndexOf("\"", indexQuote + 1);
                    int indexExistingValue = literal.Text.IndexOf(attributeValue, indexAttribute + 1, StringComparison.OrdinalIgnoreCase);
                    if (indexExistingValue == -1)
                    {
                        string literalPart1 = literal.Text.Substring(0, indexQuote);
                        string literalPart2 = literal.Text.Substring(indexQuote, literal.Text.Length - literalPart1.Length);
                        literal.Text = literalPart1 + attributeValue + literalPart2;
                        success = true;
                    }
                }
                else
                {
                    // l'atttribut n'existe pas encore
                    int indexBracket = literal.Text.IndexOf(">", indexTagName);
                    string literalPart1 = literal.Text.Substring(0, indexBracket);
                    string literalPart2 = literal.Text.Substring(indexBracket, literal.Text.Length - literalPart1.Length);
                    literal.Text = literalPart1 + attributeNamePart + "\"" + attributeValue + "\"" + literalPart2;
                    success = true;
                }
            }
     
            return success;
        }

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

Discussions similaires

  1. exécuter javascript via un programme C# ?
    Par iiiou dans le forum C#
    Réponses: 3
    Dernier message: 16/01/2013, 21h26
  2. [VB.NET] Exécuter du VBS via un fichier externe
    Par Jihnn dans le forum Windows Forms
    Réponses: 8
    Dernier message: 17/07/2006, 15h59
  3. Réponses: 8
    Dernier message: 10/11/2005, 15h58
  4. []Controle pendant l'utilisation de Outlook via VB
    Par Delphi-ne dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/09/2005, 11h11
  5. [jsp]controles des formulaires servlet ou javascript ?
    Par alexandra_ape dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 05/07/2004, 14h46

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