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 :

[Property] Définir une Property d'un tag via une fonction


Sujet :

ASP.NET

  1. #1
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut [Property] Définir une Property d'un tag via une fonction
    Salut !

    Toujours dans ma série de question liées au properties, j'aimerais pouvoir définir l'attribut d'un tag ASP.Net, par exemple le Text d'un <asp:Label>, à l'aide d'une fonction.

    Je pensais le faire de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Label ID="test" runat="server" Text='<%= Traduction("helloWorld") %>' />
    Mais ça ne fonctionne pas (le code n'est pas interprété). Comment puis-je obtenir un comportement similaire, mais sans (si possible) passer par le code behind. On peut toujours s'enregistrer au PreRender pour définir le texte, mais ça implique de créer une fonction par Label à traduire, ce qui fait beaucoup !

    Bien sûr, pour le Label, on pourrait simplement écrire le <span> à la main, et ça fonctionnerait, mais je dois aussi faire ça pour d'autres tags (Button, etc..) et d'auter Properties (ToolTip, etc...).

    Quelqu'un a-t-il une idée ? Merci d'avance !
    Wookai


  2. #2
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    En faisant un Page.Databind() dans le Page_Load ?

    Mais à priori, si c'est pour rendre le site multilingue, pourquoi n'utilises-tu pas le mécanisme des ressources ?
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Normal, les simples quotes ne sont pas conformes avec la syntaxe XML...
    Ca marche pas si tu fais comme ça ?
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Label ID="test" runat="server" Text="<%= Traduction(&quot;helloWorld&quot;) %>" />

    EDIT: bon, ça m'énerve, il me remplace '& quot;' par '"'... bref, ce que je veux dire c'est qu'il faut remplacer les guillemets dans l'attribut par '& quot;' (sans l'espace)

  4. #4
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    En fait, j'ai mis des guillements simples car c'est ce qu'il faut faire dans un compostant "databindé", lorsqu'on utilise par exemple Eval() ou Bind().

    Avec des guillements doubles, j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Les balises serveur ne peuvent pas contenir des constructions <% ... %>.
    Ce qui me fait malheureusement dire que ça ne dois pas être possible ! Comment faire d'autre ?
    Wookai


  5. #5
    Membre averti
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut
    Essaie plutôt avec ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <asp:Label ID="test" runat="server" Text='<%# Traduction("helloWorld") %>' />
    la seule chose que j'ai changé c'est <%= en <%# et aussi autre chose, on ne sais jamais, ta méthode Traduction te renvoie bien un String ? ^^
    ****** Analyse/Développeur .Net

  6. #6
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    J'avais aussi essayé ! Ca revient au même que dans mon premier post : le code n'est pas interprété et "passe tout droit"...

    Ma fonction renvoie bien un String, oui...

    Merci pour ton aide en tous cas, mais je commence à croire que je vais vraiment devoir me taper toutes ces fonctions PreRender dans le code-behind ...
    Wookai


  7. #7
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Citation Envoyé par Pongten Voir le message
    En faisant un Page.Databind() dans le Page_Load ?

    Mais à priori, si c'est pour rendre le site multilingue, pourquoi n'utilises-tu pas le mécanisme des ressources ?
    Désolé, je n'avais pas vu ton post !

    J'ai essayé, le page.Databind() ne change absolument rien (le code n'est pas interprété).

    Si je n'utilise pas les resx, c'est parce que je veux pouvoir faire faire la traduction aux utilisateurs, et donc traduire "à chaud" : l'utilisateur se logge et peut diretement traduire les éléments depuis une interface d'admin.

    De plus, j'aurais aussi besoin de ça d'une manière plus générale, pas uniquement pour la traduction (même si ces cas sont plus rares et pourraient se faire via le code-behind ...).

    PS: je précise que dans un contrôle "databindé", par exemple à l'intérieur d'un TemplateField d'un GridView, ceci fonctionne parfaitement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ToolTip='<%# Traduction("edit") %>'
    Wookai


  8. #8
    Membre averti
    Avatar de SoBaKa
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 242
    Points : 349
    Points
    349
    Par défaut
    encore une question pour toi ^^

    la méthode Traduction n'est pas en private ? (me souviens m'être pris la tête avec ça au début, perso, je la met en protected)
    ****** Analyse/Développeur .Net

  9. #9
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Héhéhé ... Non non, elle est bien public. En fait, je pense que si c'était un problème de syntaxe/permissions/etc... il me mettrait une erreur non ?
    Wookai


  10. #10
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    et si tu retires les ' ? ça donne quoi ?
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  11. #11
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    En retirant les ', j'ai un message similaire à celui obtenu avec les " :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Les balises serveur ne peuvent pas contenir des constructions <% ... %>.
    Wookai


  12. #12
    Membre expert
    Avatar de Pongten
    Homme Profil pro
    IT Analyst & Software Developer
    Inscrit en
    Juin 2002
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : IT Analyst & Software Developer
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 173
    Points : 3 543
    Points
    3 543
    Par défaut
    Bon, clairement, il n'est pas possible de placer des balises <% %> dans une balise de contrôle serveur...

    Si tu n'utilise pas le Label côté serveur, remplace le par un span et ça ira.
    Si tu ne peux procéder comme ça, tu vas devoir, pour chaque contrôle serveur, procéder à sa traduction dans le Load de la page.

    Autre solution : créer tes propres contrôles qui héritent des contrôles asp.net en les étendant pour qu'ils fassent eux-même appel à la méthode de traduction dans leur init / load.
    Si ton problème a une solution, rien ne sert de t'inquiéter..
    Si il n'en a pas, t'inquiéter ne sert à rien


  13. #13
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Hum ... Ta solution de créer mes propres contrôles me plaît bien !

    Je vais explorer de ce côté-là, déjà pour les labels. Je vous tiendrai au courant, mais merci déjà pour l'idée !
    Wookai


  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Salut,

    effectivement la valeur dans la propriété est interprété comme une chaine de caractère donc meme avec les balises serveur ca ne change rien.

    Si on passe pas par les fichiers de ressources pour les traductions, je pense que ca ne marchera donc pas ( ca ne fonctionne qu'avec des Bind avec les Eval etc..)

    Tu peux toujours suivre selon tes besoins ces voies du moins propre au plus propre

    1/ ca fonctionne mais c'est pas propre (comme tu disais avec le span)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <div title='<% Response.Write( this.Test("chaine")); %>'><asp:Label ID="Label1" runat="server" ><% Response.Write(thisTest("chaine")); %></asp:Label></div>
    2/ Passer par le codeBehind pour affecter toutes les traductions à tes controles.

    3/ Te créer des surcharges de tes webControl que tu utilises, tu intègres ton systeme de traduction sur la surcharge des propriétés qui doivent être traduites et donc tu n'as qu'à écrire tes codes de traductions dans l'aspx sans ce soucier du reste.

    A+

  15. #15
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Yeaaaaapiiiiie !

    Je viens de créer mon TranslatedLabel, qui étend simplement Label, en overridant Render :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            protected override void Render(HtmlTextWriter writer) {
                try {
                    this.Text = String.Format(this.Pattern, this.Translator._(this.Scope, this.Key));
                }
                catch {
                    this.Text = this.Translator._(this.Scope, this.Key);
                }
     
                base.Render(writer);
            }
    (Scope et Key sont des Properties que j'ai ajoutées au Label)

    Et ça s'utilise facilement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <my:TranslatedLabel ID="__pageLabel" runat="server" Key="page" />
    Bon, dans la lancée je vais faire mes TranslatedButton, TranslatedLink, etc... !

    Merci à tous pour votre aide, et aux deux dernier posteurs pour la bonne idée !
    Wookai


  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Février 2008
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Oups désolé j'avais pas lu les posts jusqu'au bout, je pensais la meme chose que pongten

  17. #17
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Pas de soucis ! Merci à toi d'avoir lu et proposé ton idée !
    Wookai


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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/03/2008, 19h30
  2. [ODBC] Sécuriser une base de données Access via une interface en PHP
    Par maraly dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/08/2007, 08h49
  3. Réponses: 9
    Dernier message: 25/02/2007, 13h46
  4. Réponses: 5
    Dernier message: 10/11/2006, 11h00
  5. Réponses: 6
    Dernier message: 09/11/2005, 17h29

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