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 :

[2.0] Surcharger la propriété ClientID()


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut [2.0] Surcharger la propriété ClientID()
    Salut,

    J'ai toujours été gêné, comme beaucoup je pense, par la définition automatique de l'identifiant d'un WebControl par .net dans le rendu coté client. Un simple "monGridView" devient "ctl00_CPH_content_monGridView". J'ai toujours pensé que l'identification d'un contrôle est un problème de développeur pas de framework.

    Je me suis donc penché sur la question et, doué comme je suis, par "penché sur la question" j'entends "penché sur google".
    La solution existe : surcharger la propriété .ClientID().

    J'ai trouvé deux déclinaisons de cette solution, la surcharge de la propriété de chaque WebControl et la surcharge de la propriété de la classe Control.
    J'ai implémenté la première solution, mais elle a pour inconvénient de surcharger la propriété contrôle par contrôle. Or, la seconde option est plus intéressante puisque justement on surchargerait la classe Control directement, mais je n'arrive pas à l'implémenter.
    Mon application plante en retournant comme message d'erreur :
    Balise server inconnue
    Voici donc le code ne fonctionnant pas.
    La classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class Control
        Inherits System.Web.UI.Control
        Public Overrides ReadOnly Property ClientID() As String
            Get
                Return MyBase.ID
            End Get
        End Property
        Public Overrides ReadOnly Property UniqueID() As String
            Get
                Return MyBase.ID
            End Get
        End Property
    End Class
    La code aspx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <%@ Page Language="VB" MasterPageFile="~/Home.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="Default" title="Page sans titre" %>
    <%@ Register assembly="maBibliotheque" namespace="maBibliotheque" TagPrefix="cc" %>
    <asp:Content ID="Content1" ContentPlaceHolderID="CPH_content" Runat="Server">
       <cc:label id="coucou" runat="server">COUCOU</cc:label>
    </asp:Content>
    Si, par contre, je définis une classe Label héritant de System.Web.UI.WebControls, ça fonctionne.

    Avez-vous une idée?

    Merci par avance.

  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
    Pourquoi tu veux modifier ça?

  3. #3
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    - pour alléger le rendu HTML.
    - pour pouvoir utiliser les sélecteurs CSS proprement au lieu de privilégier les classes qui elles aussi surchargent le code rendu.
    - pour pouvoir utiliser les identifiants dans le javascript tant qu'à faire, même si on peut utiliser ClientID().

  4. #4
    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
    Mouais, je suis pas convaincu.
    Bonne chance

  5. #5
    Membre éclairé Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Par défaut
    Citation Envoyé par franculo_caoulene Voir le message
    - pour alléger le rendu HTML.
    - pour pouvoir utiliser les sélecteurs CSS proprement au lieu de privilégier les classes qui elles aussi surchargent le code rendu.
    - pour pouvoir utiliser les identifiants dans le javascript tant qu'à faire, même si on peut utiliser ClientID().
    Moi aussi peu convaincu, mais c'est vrai que c'est gênant de ne pas pouvoir (en fait on peut, y'a rien d'interdit c'est juste plus long à taper) utiliser le # du CSS.

    Dans tous les cas tu vas devoir avoir un nom unique, donc si tu veux compresser les noms tu vas quand même avoir quelque chose du style S1_S1_ID1 (S=>section et ID=>nom "limité" pour essayer de gagner de l'espace)... mais au final pour tes propriétés CSS ça va être la même chose, tu ne vas pas pouvoir utiliser le # d'une meilleure manière... parce que l'ID unique est requis pour faire la communication avec ASP.Net donc tu auras toujours des id du style #S1_S1_ID1 et au final t'auras pas un superbe gain...

    Si tu veux vraiment avoir un gain de performance et de simplicité, faut faire du PHP-like : tu mets rien runat="server" et tu utilises que QueryString (ou l'autre) pour récupérer tes variables... mais là tu perds l'intérêt de ASP.Net qui est de coder à peu près comme une application winforms ton site web.

    En tous cas bon courage!

    À mon avis ce n'est pas la différence de quelques caractères au niveau du code html qui te fera gagner beaucoup.
    En revanche tu aurais beaucoup à gagner en limitant le nombre d'images différentes affichées sur le site (ne charger qu'une image qui contient plusieurs images et utiliser le background-position par exemple, c'est chiant à faire mais ça accélère le chargement).

  6. #6
    Membre Expert Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Par défaut
    En effet, je connais la techniques des sprites CSS. D'ailleurs concernant les performances : http://developer.yahoo.com/performance/

    J'ai juste envie de persister, signer et de dire qu'identifier un élément de la page est le rôle du développeur, pas du framework .

  7. #7
    Membre éclairé Avatar de MicaelFelix
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    254
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 254
    Par défaut
    Oui je vois ce que tu veux dire mais dans le même principe si tu voudrais tout gérer à la place du framework (les communications et le reste), à quoi sert d'avoir un framework qui fait tout à ta place? Le but du framework c'est justement de choisir les identifiants afin que le programmeur reste performant et ne se soucie pas de ce genre de détails en restant "haut niveau" dans la conception de son code.
    Mais je te comprends, c'est vrai que j'ai eu la même envie lorsque j'ai vu que les ID étaient associés automatiquement

    En tous cas je te souhaite d'y arriver, mais j'ai des doutes concernant la finalité de la chose : je dis ça dans le sens où je ne vois pas comment tu pourrais améliorer ça sachant que tout leur système de postback réside sur les ID des champs, et que pour avoir un ID unique tu seras obligé de faire un genre de système comme eux (quelque soit la compression utilisée pour tes ID, ton ID généré au final doit forcément comporter un code d'identification unique), bref au niveau CSS ça sera le même problème, quoique peut être un minimum optimisé (9_divcentral à la place de ctl0_ctl1_divcentral) car plus court, mais le problème sera toujours présent.

    Ma question est : supposons que tu arrives à avoir un fonctionnement parfait (sans contrainte par rapport à la version 'Crosoft) avec un ClientID personnalisé, que comptes tu faire exactement pour améliorer le ClientID? Mettre un numéro unique à la place des ctl00_cl1_content_MONCHAMP ?

Discussions similaires

  1. [WD19] Surcharge de la propriété valeur d'une colonne de table
    Par Fred 57220 dans le forum WinDev
    Réponses: 1
    Dernier message: 02/05/2014, 22h24
  2. Surcharge d'une propriété : property() VS @property
    Par plxpy dans le forum Général Python
    Réponses: 2
    Dernier message: 07/03/2011, 17h34
  3. Surcharger la propriété Text d'un TMaskEdit
    Par dim07 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 09/02/2010, 18h39
  4. Comment surcharger une propriété ?
    Par bubulemaster dans le forum Composants VCL
    Réponses: 5
    Dernier message: 19/01/2008, 12h22
  5. Supprimer des propriétés CSS par surcharge
    Par jojosbiz dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 31/10/2007, 07h57

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