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 :

Id et name de champs runat="server"


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Id et name de champs runat="server"
    Salut,

    Voilà, c'est peut-être une question bête, mais j'arrive pas à trouver quelque chose sur le sujet...

    Est-ce qu'il y a moyen, quand on déclare un champ de formulaire (ou en fait n'importe quelle autre balise), de faire en sorte qu'il garde les mêmes id et name que ceux qu'on a définit ? Parce que ASP.Net reformate tous les id et les name avec des noms à rallonge et du coup :
    1) ça m'arrange pas parce que desfois je suis obligée de passer les valeurs en get donc il y a un risque que la taille de la QueryString devienne trop longue
    2) si je veux passer un des paramètres à la page via un lien, je n'ai pas le exact nom du paramètre
    3) pour faire des fonctions dynamique avec du Javascript, c'est franchement pas pratique...

    Donc est-ce que par hasard c'est possible de désactiver ce renommage ?

    Sinon je devrais me passer des avantages du runat="server", ce qui serait dommage...

    Merci d'avance !

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    JE te conseil vivement de laisser asp .net gérer les Id.

    Sinon pourrait tu etre explicite sur ton besoin car je vois pas pkoi tu voudrais passer l'id d'un control a une autre page la comme ca.

    Et si tu veux l'utiliser javascript, tu peux utiliser "ClientScript.RegisterStartupScript" qui permet de mettre du javascript dans la page et utilisé tonControl.ClientId pour avoir son identifiant complet.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 30
    Par défaut
    Salut,

    gyzmau>Un exemple avec le ClientScript.RegisterStartupScript
    m'interresse du moins j'ai pas creuser la question.

    Laewella>Sinon tu n'a pas besoin de travailler avec les ID
    Dans ton postback tu retrouves tes contrôles serveurs
    ensuite pour lire dans des datalist ou gridview par exemple
    avec des templates


    i est le numero de la ligne ici et j'ai mis un template avec un Label.
    Label lb = maDatalist.Items[i].FindControl("NomDomaine") as Label;

    Si tu crées dynamiquement tes tableaux, c'est normal que tu n'y perds mais avec des contrôles comme le listview (dotnet 3.5) tu peux quasi tout faire.
    Sinon il faut travailler avec les repeater gridview et datalist.

    Les contrôles sont hyper puissants quand ont les maîtrise.

    Bon coding

  4. #4
    CUCARACHA
    Invité(e)
    Par défaut J'ai géré le problème
    Salut,

    En fait, il est tout à fait possible de se débrouiller avec les Id, les ClientId et les Id côté client.

    Il faut (bien entendu) laiser asp.net gérer les clientId car asp net garanti leur unicité en particulier lorsque tu utilises les MasterPages, voir les Nested Master pages si tu es déjà en 3.5.

    Tu as le droit d'écrire ça :

    Fonction javascript côté client
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <asp:Content ID="Content1" ContentPlaceHolderID="cphForm" runat="server">
        <asp:Label ID="myLabel" runat="server" Text="Label"></asp:Label>
        <script language="javascript" type="text/javascript">
            var dynamicId = '<%=myLabel.ClientID%>';
            alert (dynamicId);
        </script>
     
    </asp:Content>
    Ca marche aussi avec toutes les variables protected...

    ++

    Laurent

  5. #5
    Expert confirmé
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Par défaut
    Citation Envoyé par Laewella Voir le message
    Parce que ASP.Net reformate tous les id et les name avec des noms à rallonge et du coup :
    1) ça m'arrange pas parce que desfois je suis obligée de passer les valeurs en get donc il y a un risque que la taille de la QueryString devienne trop longue
    2) si je veux passer un des paramètres à la page via un lien, je n'ai pas le exact nom du paramètre
    3) pour faire des fonctions dynamique avec du Javascript, c'est franchement pas pratique...
    0. Imaginons que tu as deux user controls identiques. Ces users controls comportent un textbox que tu nommes "mon_id", que va-t-il arriver? Tu vas avoir deux contrôles avec "mon_id" comme résultat, ce qui n'est pas autorisé (bien que le navigateur ne te bloquera pas l'affichage pour la cause car le navigateur est prévu pour faire abstraction des betises des développeurs).

    1. les valeurs en get?
    Par ailleurs, pourquoi veux-tu passer le nom de ces champs dans ta querystring?
    2. Idem... le nom du paramètre, ce n'est pas le nom du contrôle. Si tu veux avoir un paramètre qui s'appelle "abc", tu peux. Après il te faudra, au chargement, récupérer QueryString["abc"] et assigner ma valeur au composant que tu souhaites. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTextBox.Text = QueryString["abc"];
    3. ca ne serait pas pratique d'avoir deux fois le même id comme indiqué dans 0. ASP.NET te permet d'éviter cela...

    Peut être devrais-tu jeter un oeil à : http://ditch.developpez.com/aspnet/introduction/tome3/

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    nhervagault->
    Un exemple d'init de dragandrop dans une masterpage:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Page.ClientScript.RegisterStartupScript(this.GetType(), "dragMe", "dragDrop.initElement('" + ControltoDrag.ClientID+"');", true);

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Ditch Voir le message
    0. Imaginons que tu as deux user controls identiques. Ces users controls comportent un textbox que tu nommes "mon_id", que va-t-il arriver? Tu vas avoir deux contrôles avec "mon_id" comme résultat, ce qui n'est pas autorisé (bien que le navigateur ne te bloquera pas l'affichage pour la cause car le navigateur est prévu pour faire abstraction des betises des développeurs).
    Oui, bien sûr qu'il ne faut pas deux champs avec le même nom... Je n'avais pas pensé à ça parce que pour le moment, mes contrôles génèrent les champs non runat="server" et déterminent leur id et leur name au moment de les écrire... Mais je n'aime pas trop l'idée qu'on ne me laisse pas nommer mes champs de formlaire et mes autres id comme je veux. Surtout que outre les problèmes de Javascript, on rencontre des problèmes de CSS, si l'id doit pouvoir être un identifiant CSS, ici ça ne serait plus le cas.

    Citation Envoyé par Ditch Voir le message
    1. les valeurs en get?
    Par ailleurs, pourquoi veux-tu passer le nom de ces champs dans ta querystring?
    2. Idem... le nom du paramètre, ce n'est pas le nom du contrôle. Si tu veux avoir un paramètre qui s'appelle "abc", tu peux. Après il te faudra, au chargement, récupérer QueryString["abc"] et assigner ma valeur au composant que tu souhaites.
    Je vais répondre aux deux points en même temps...
    J'ai un formulaire, dans lequel j'ai plusieurs champs, en runat="server" pour pouvoir interagir avec dans mon code-behind.
    Je veux donner la possibilité à l'utilisateur de pourvoir arriver sur ce formulaire avec un champ déjà rempli via un lien html, je vais donc être obligée de passer cette valeur en QueryString. A ce moment là, j'aimerai n'avoir ni à passer un nom à rallonge que je ne peux même pas prévoir puisque je ne suis pas dans la page de mon formulaire, ni à définir un n+1ième nom de paramètre...
    De plus, j'utilise un composant maison (dont le développement ne dépend pas de moi) qui permet l'affichage d'un tableau paginer. La pagination s'effectuant via des lien HTML, la QueryString est nécessaire.

    Citation Envoyé par Ditch Voir le message
    Peut être devrais-tu jeter un oeil à : http://ditch.developpez.com/aspnet/introduction/tome3/
    Je vais jeter un oeil, mais je vois déjà "variable de session" et je peux dire que dans l'environnement de production que l'on utilise au boulot, les sessions sont désactivées à cause du contexte de webfarm (donc on arrive pas sur le même serveur à chaque fois).

    Et pour répondre au reste, le javascript, je le fais dans un fichier JS à part, pas directement dans la page ! Donc pas de référence asp.net à l'id

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/05/2007, 15h54
  2. UPDATE en ajoutant un 0 sur un champ de type "char"
    Par doum2 dans le forum Requêtes
    Réponses: 1
    Dernier message: 08/03/2006, 14h22

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