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 :

une ligne qui ne s'exécute pas


Sujet :

ASP.NET

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut une ligne qui ne s'exécute pas
    Bonjour, dans mon programme, j'ai ce bout de code:

    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
     protected void go_Click(object sender, EventArgs e)
        {
            ModalPopupExtender1.Hide();
            try
            {
                connection.Open();
                .....
                MyCmd.ExecuteNonQuery();
                connection.Close();
                fill();
                btnLocaliser.Attributes.Add("onClick", "javascript:findAddress('" + adresse.Text +  "','" + statut.Text + "'); return false;");
     
            }
            catch (SqlException ex)
            {
                go.Attributes.Add("onclick", "javascript: return alert('Erreur :"+ex.ToString()+"');");
            }
            finally
            {
                connection.Close();
            }
        }
    tout marche bien sauf que la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    btnLocaliser.Attributes.Add("onClick", "javascript:findAddress('" + adresse.Text +  "','" + statut.Text + "'); return false;");
    ne s'exécute pas

    avez vous une idée ?

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Points : 241
    Points
    241
    Par défaut
    Bonjour,

    Qu'est-ce que donne le HTML généré au niveau de ton "btnLocaliser" ?
    Est-ce que tu retrouves ton appel JS ou le classique "doPostBack" ?
    Quand tu cliques sur ton bouton, il n'y a pas de message d'erreur ?


    Seb

  3. #3
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    mon bouton localiser contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="submit" name="btnLocaliser" value="Localiser" onclick="javascript:findAddress('Avenue Said Daoudi, Kenitra, Morocco','Station test','34.26140183944268','-6.600465774536133','PK105, P4266','Mr X','Société','Régularisé'); return false;WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;btnLocaliser&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="btnLocaliser" class="button" />
    normalement si la ligne s'exécute, elle va m'afficher une infos sur ma page, mais rien ne se passe, et pas de message d'erreur

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2011
    Messages : 89
    Points : 62
    Points
    62
    Par défaut
    je ne m'y connais pas trop en javascript mais une chose m'etonne dans le code que tu as posté : il faudrait que tu vérifies la ponctuation (si dans ton adresse tu as une quote il faut penser à la "préparer" pour pas que elle soit interpretee comme du code dans ton bouton localiser).

    moi j'utiliserais la fonction suivante pour éviter cela sur l'adresse qui est passée en parametre avant ton bouton : ca remplace ' par ' ' (sans l'espace)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public static string NettoieString(string strValeur)
        {
            return strValeur.Replace("'", "''").ToUpper();
        }
    de la même manière vérifie les virgules, doubles quotes etc...

  5. #5
    Membre actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Points : 241
    Points
    241
    Par défaut
    Je suis d'accord avec la remarque de Nid4Mail : ta méthode JS attend 2 paramètres mais dans le code que tu nous montres entre les "&#39;" et les virgules, il y a > 2 paramètres passés.

    Seb

  6. #6
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    j'ai revérifié le nombre de paramétres avec les valeurs envoyées, il n 'a ya pas d'erreur,
    Je vous ai envoyé uniquement un exemple mais ma fonction réel est la suivante :

    c#
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    btnLocaliser.Attributes.Add("onClick", "javascript:findAddress('" + adresse.Text + "','" + nmStation.Text +
                "','" + latitude.Text + "','" + longitude.Text + "','" + emplacement.Text + "','" + prop.Text + "','" + tpProp.Text + "','" + statut.Text + "'); return false;");
    js :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    function findAddress(adresse,nom ,lat,lgt,emplacement,prop,TP,statut){
    ...}
    html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <input type="submit" name="btnLocaliser" value="Localiser" onclick="javascript:findAddress('Avenue Chakib Arsalane','param1','34.2533146152774','-6.58913612365723','Param2','param3','Société             ','Régularisé                    '); return false;WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;btnLocaliser&quot;, &quot;&quot;, true, &quot;&quot;, &quot;&quot;, false, false))" id="btnLocaliser" class="button" />

  7. #7
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Il y a un bug connu de longue date qui provoque l'encodage HTML des attributs, donc une apostrophe (simple quote) est encodée en &#39; ce qui rend impossible l'évaluation de l'expression javascript dans ton cas. Quelle version du .NET Framework utilises-tu ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  8. #8
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Merci pôur votre réponse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <compilation debug="true" targetFramework="4.0">
    			<assemblies>
    				<add assembly="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Windows.Presentation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    				<add assembly="System.Data.Services.Client, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    				<add assembly="System.Web.Extensions.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies>
    		</compilation>

  9. #9
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Ok effectivement c'est sur le 4.0 que ce comportement étrange existe. En fait Microsoft est parti du principe que pour ajouter du script côté client, il ne faut pas passer par les attributs, mais par le ClientScriptManager. On peut trouver principalement 3 solutions sur le net :
    1. Utiliser le ClientScriptManager
    2. Surcharger la façon dont l'encodage est géré
    3. Créer son propre control

    Pour la première, il faut passer par quelque chose de ce genre :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Page.ClientScript.RegisterStartupScript(Me.GetType(), "callFindAddress", "function callFindAddress() { findAddress('" + adresse.Text + "','" + nmStation.Text + "','" + latitude.Text + "','" + longitude.Text + "','" + emplacement.Text + "','" + prop.Text + "','" + tpProp.Text + "','" + statut.Text + "'); }")
    btnLocaliser.Attributes.Add("onclick", "callFindAddress();");

    Pour la seconde, il faut surcharger l'encodage des attributs HTML, et éventuellement celui du code HTML :
    Code C# : 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
    public class HtmlEncodingOverride : HttpEncoder
    {
    	protected override void HtmlAttributeEncode(string value, TextWriter output)
    	{
    		var sb = new StringBuilder();
    		var sw = new StringWriter(sb);
     
    		base.HtmlAttributeEncode(value, sw);
     
    		output.Write(sw.ToString().Replace("'","'"));
    	}
     
    	protected override void HtmlEncode(string value, TextWriter output)
    	{
    		var sb = new StringBuilder();
    		var sw = new StringWriter(sb);
     
    		base.HtmlEncode(value, sw);
     
    		output.Write(sw.ToString().Replace("'", "'"));
    	}
    }
    La seconde méthode (HtmlEncode) n'est pas obligatoire, mais dans certains cas elle est nécessaire. Ensuite, il faut déclarer ceci dans le Web.config :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <httpRuntime encoderType="MyNamespace.HtmlEncodingOverride, MyAssembly" />

    Enfin, pour la troisième solution, il y a plein de tuto sur le net, donc je te laisse le soin de chercher.

    Est-ce que ça solutionne ton problème ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  10. #10
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    Bonjour, merci pour votre reponse, j'ai opté pour la premiere solution, d'ailleurs c'est cella que j'ai comprise :

    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
     ModalPopupExtender1.Hide();
            try
            {
                connection.Open();
                string InsertQ = "INSERT INTO dbo.StationsServices(Name_station,Latitude,Longitude,Emplacement,Propriétaire,Type_Prop,Adresse,Ville,Statut) VALUES('"
                    + nmStation.Text + "', '" + latitude.Text + "','" + longitude.Text + "','" + emplacement.Text + "','" + prop.Text + "','" + tpProp.Text + "','" + adresse.Text +
                    "','ville','" + statut.Text + "');";
                SqlCommand MyCmd = new SqlCommand(InsertQ, connection);
                MyCmd.ExecuteNonQuery();
                connection.Close();
                fillStations();
     
                           Page.ClientScript.RegisterStartupScript(this.GetType(), "callFindAddress", "function callFindAddress() { findAddress('" + adresse.Text + "','" + nmStation.Text +
                "','" + latitude.Text + "','" + longitude.Text + "','" + emplacement.Text + "','" + prop.Text + "','" + tpProp.Text + "','" + statut.Text + "'); }");
     
                go.Attributes.Add("onclick", "callFindAddress();");
     
     
            }
            catch (SqlException ex)
            {
                go.Attributes.Add("onclick", "javascript: return alert('Erreur :"+ex.ToString()+"');");
            }
            finally
            {
                connection.Close();
            }
    mais rien ne se passe,le bouton go ne veut pas se valider et quand j'enleve les deux lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                Page.ClientScript.RegisterStartupScript(this.GetType(), "callFindAddress", "function callFindAddress() { findAddress('" + adresse.Text + "','" + nmStation.Text +
                "','" + latitude.Text + "','" + longitude.Text + "','" + emplacement.Text + "','" + prop.Text + "','" + tpProp.Text + "','" + statut.Text + "'); }");
     
                go.Attributes.Add("onclick", "callFindAddress();");
    mon champ s'ajoute bien a ma base de données

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2013
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 36
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    ne serait-ce pas la balise <script> </script> manquante ?
    quand tu enregistres un script via le scriptmanager, il y'a un boolean pour indiquer s'il faut rajouter la balise <script ..> à ton bout de code. dans le cas contraire,

    ClientScript.RegisterStartupScript(Me.GetType, "testkey", "function test() { alert('testfunction');}", True)

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/11/2008, 09h06
  2. [MySQL] une requête Update qui ne s'exécute pas
    Par DeveX dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/07/2008, 13h37
  3. Réponses: 4
    Dernier message: 17/03/2007, 01h06
  4. [VBA-E]une boucle qui ne s'arrète pas
    Par vivelesgnous dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/02/2006, 18h05
  5. Réponses: 3
    Dernier message: 21/01/2004, 08h47

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