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 :

Comment referencer un WebControl personnel dans un formulaire


Sujet :

ASP.NET

  1. #1
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut Comment referencer un WebControl personnel dans un formulaire
    Bonjour

    Dans ma classe MyTextBox qui se trouve dans le fichier /App_Code/MyTextBox.cs
    J'ai le code ci-dessous qui me permet de faire mon propre WebControl de type TextBox

    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
    [ValidationProperty("Valeur")]
    public class MyTextBox : WebControl
    {
        private string _valeur;
        public string Valeur
        {
            get { return _valeur; }
            set { _valeur = value; }
        }
     
        protected override void Render(HtmlTextWriter writer)
        {
            writer.WriteBeginTag("input");
            writer.WriteAttribute("id", ID);
            writer.WriteAttribute("type", "text");
            writer.WriteAttribute("value", _valeur);
            writer.Write(HtmlTextWriter.SlashChar);
            writer.Write(HtmlTextWriter.TagRightChar);
        }
    }
    Ensuite dans un formulaire aspx je voudrais utiliser mon contrôle. A priori le code ressemblerait à ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Exemple:MyTextBox runat="server" 
                id="monControl" 
                Valeur="Une valeur" />
    Toutefois je suppose que je doit référencer mon contrôle dans mon formulaire avec une commande qui devrait s'approcher du code ci-dessous.
    Mais je n'ai pas de namespace, ni d'assembly car je suis dans le même projet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ Register TagPrefix="Exemple" Namespace="Quelque_chose" Assembly="Quelque_chose_autre" %>

    Merci du coup de pouce

    Titan

  2. #2
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    Je crois que tu es obligé de mettre ton contrôle dans un namespace
    Pas la peine de préciser l'assembly

    EDIT: en fait j'ai dit une connerie, pas la peine de mettre le contrôle dans un namespace : il suffit d'indiquer "global" comme namespace dans la directive Register

  3. #3
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Par contre les mettre dans un namespace ne peut pas etre une mauvaise chose en fait...

  4. #4
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut
    Salut Tomlev

    Ta méthode me plaie beaucoup mais cela ne fonctionne pas encore.
    Je pense que j'ai encore un petit ajustement à faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ Register Namespace="Global" TagPrefix="Exemple" TagName="MyTextBox" Src="~/App_Code/MyTextBox.cs" %>
    J'ai les erreurs suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Erreur	3	Un attribut 'tagname' manque à la directive.	D:\3wCgo\Amv_tel\WWW\Frm\_Validators.aspx	2	
    Erreur	4	Balise server inconnue*'Exemple:MyTextBox'.	D:\3wCgo\Amv_tel\WWW\Frm\_Validators.aspx	45	
    Erreur	11	Validation (XHTML 1.0 Transitional) : Ce nom contient des caractères en majuscules, lesquels sont interdits.	D:\3wCgo\Amv_tel\WWW\Frm\_Validators.aspx	47	13	D:\...\WWW\
    Erreur	12	Préfixe de balise ou filtre de périphérique non reconnu 'Exemple'.	D:\3wCgo\Amv_tel\WWW\Frm\_Validators.aspx	45	2	D:\...\WWW\
    Merci d'avance

    Titan

  5. #5
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut
    Dans mon POST PRECEDENT :

    j'ai oublié de mettre la déclaration de mon controle dans le formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Exemple:MyTextBox runat="server" 
                id="monControl" 
                Valeur="Une valeur" />

  6. #6
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    Il ne faut pas mettre l'attribut Src (ça ne sert que pour les UserControl .ascx), ni le TagName (le TagName à utiliser lors de la déclaration du contrôle sera celui de la classe). En fait il faut juste faire un mapping entre un TagPrefix et le namespace.

    Citation Envoyé par titan_33 Voir le message
    Dans mon POST PRECEDENT :

    j'ai oublié de mettre la déclaration de mon controle dans le formulaire
    Tu peux modifier un post en cliquant sur Editer...

  7. #7
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut
    Merci Tomlev

    Encore une précision

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ Register Namespace="Global"  TagPrefix="Exemple" %>
    Ma classe se trouvant dans /App_Code/MyTextBox.cs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public class MyTextBox : WebControl
    { ... }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Exemple:MyTextBox runat="server" 
                id="monControl" 
                Valeur="Une valeur" />
    Message d'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur	1	Balise server inconnue*'Exemple:MyTextBox'.	D:\3wCgo\Amv_tel\WWW\Frm\_Validators.aspx	45	
    Erreur	2	L'élément 'MyTextBox' n'est pas un élément connu. Ceci peut se produire s'il existe une erreur de compilation dans le site Web.	D:\3wCgo\Amv_tel\WWW\Frm\_Validators.aspx	45	10	D:\...\WWW\
    Nous y sommes presque

    Merci d'avance

    Titan

  8. #8
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    pas de majuscule à "global"...

  9. #9
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut
    Ce n'est pas encore cela Tomlev

    J'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ Register Namespace="global"  TagPrefix="Exemple" %>
    et toujours
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur	2	Balise server inconnue*'Exemple:MyTextBox'.	D:\3wCgo\Amv_tel\WWW\Frm\_Validators.aspx	45	
    Erreur	2	L'élément 'MyTextBox' n'est pas un élément connu. Ceci peut se produire s'il existe une erreur de compilation dans le site Web.	D:\3wCgo\Amv_tel\WWW\Frm\_Validators.aspx	45	10	D:\...\WWW\
    On y est presque ...

  10. #10
    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 : 43
    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 753
    Points
    39 753
    Par défaut
    Bon, après re-vérification, il semblerait que j'ai dit une connerie avec cette histoire de namespace global... désolé
    Je sais pas s'il y a un moyen de spécifier le namespace global, mais j'ai pas trouvé comment. A priori il faut donc déclarer ton contrôle dans un namespace, et indiquer ce namespace dans la directive Register...
    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
    namespace MyNamespace
    {
        /// <summary>
        /// Summary description for MyTextBox
        /// </summary>
        [ValidationProperty("Valeur")]
        public class MyTextBox : WebControl
        {
            private string _valeur;
            public string Valeur
            {
                get { return _valeur; }
                set { _valeur = value; }
            }
     
            protected override void Render(HtmlTextWriter writer)
            {
                writer.WriteBeginTag("input");
                writer.WriteAttribute("id", ID);
                writer.WriteAttribute("type", "text");
                writer.WriteAttribute("value", _valeur);
                writer.Write(HtmlTextWriter.SlashChar);
                writer.Write(HtmlTextWriter.TagRightChar);
            }
        }
     
    }
    Code ASP.NET : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <%@ Register TagPrefix="my" Namespace="MyNamespace" %>
     
    ...
     
    <my:MyTextBox ID="textBox1" runat="server" Valeur="toto" />

  11. #11
    Membre expérimenté Avatar de Arthis
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 265
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Italie

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 265
    Points : 1 352
    Points
    1 352
    Par défaut
    Personnelement, j ai le meme cas de figure mais avec des controles dans un namespace:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    namespace MonNamespace.UI {
    public class RB : System.Web.UI.WebControls.Label {
    ...
    }
    et j 'ai rajouté ca dans le web config histoire de l'avoir sur toutes mes pages :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <pages >
                <namespaces>
                     <add namespace="MonNamespace.UI" />
               </namespaces>
               <controls>
                 <add tagPrefix="MesUC" namespace="MonNamespace.UI" />
              </controls>
    </pages>

  12. #12
    Membre régulier Avatar de titan_33
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    245
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 245
    Points : 91
    Points
    91
    Par défaut
    CA MARCHEEEEEEEE ! ! ! !

    Merci tomlev pour ta ténacité.

    Titan

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/02/2008, 15h54
  2. Comment vérifier une URL saisie dans mon formulaire ?
    Par cdevl32 dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 28/10/2007, 18h32
  3. Réponses: 1
    Dernier message: 25/10/2006, 18h06
  4. Réponses: 12
    Dernier message: 24/05/2006, 15h37
  5. comment afficher une image animée dans un formulaire
    Par dadamovic dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 13/05/2006, 18h59

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