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 :

Créer ses propres contrôles .NET


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut Créer ses propres contrôles .NET
    Bonjour,

    J'aimerais savoir comment puis-je créer mes propres WebControl?

    En effet, en WinForm il est tellement facile de créer ces propres UserControl!! Je ne comprends pas pourquoi il n'y a pas la même chose pour les WebControls?

    Merci d'avance pour vos réponses

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    tu veux créer des user controls ou des web controls ?

    dans la prochaine version de la faq asp.net, il y aura des q/r sur le sujet, en attendant, un contrôle utilisateur (extension .ascx) est grosso modo une mini page (.aspx) qui peut s'inclure dans une page et qui ne comporte aucune des balises suivantes : <html><body><form>.
    Un controle utilisateur a pour directive :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ Control Language="C#" AutoEventWireup="false" CodeBehind="monUserControl.ascx.cs" Inherits="monProjet.monUserControl" %>
    Pour l'ajouter depuis visual studio :
    Click droit sur le projet, Add --> New Item -> Web User Control

    L'IDE génère automatiquement la directive du controle utilisateur et le fichier source de code behind dont devra hériter le controle utilisateur

    Pour utiliser un controle utilisateur dans sa page, il faut utiliser la directive @register pour faire connaitre le controle utilisateur à la page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <%@ Register Src="~/monUserControl.ascx" TagName="MonUserControl" TagPrefix="UC" %>

    (NB : on peut préciser l'assembly qui contient l'userControl si celle-ci est différente en rajoutant l'attribut Assembly="....")
    Pour l'insérer enfin dans sa page, on utilisera la combinaison TagPrefix:TagName :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <UC:MonUserControl runat="server" />
    Cette dernière ligne de code devra bien sur être ajoutée entre les balises <form> et </form> de sa page.

    Un usercontrol dérivera de la classe UserControl

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Citation Envoyé par The eye Voir le message
    J'aimerais savoir comment puis-je créer mes propres WebControl?
    Ben je dirais des webControls...

    Ce que je reproche à Visual Studio 2005 c'est qu'on ne peut même pas créer de projets bibliothèque de WebControl, il faut créer un site Web dans lequel on ajoute des .ascx

    De plus ta méthode marche-t-elle avec du code behind? d'après ce que j'ai essayé non...

    le .ascx
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <%@ Control Language="vb" AutoEventWireup="false" CodeBehind="wcDistributeur.ascx.vb" Inherits="bWebControls.cDistributeur" %>
    <asp:Label ID="lblDistributeur" runat="server" Text="" /> : 
    <asp:DropDownList ID="ddlDistributeur" runat="server" />
    .ascx.vb
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    Imports bLangue.cLangue
     
    Partial Public Class cDistributeur
        Inherits System.Web.UI.WebControls.WebControl
     
    #Region "Propriétés"
     
        Private _cnxString As String = ""
        Public Property connectionString() As String
            Get
                Return Me._cnxString
            End Get
            Set(ByVal value As String)
                _cnxString = value
            End Set
        End Property
     
        Private _langue As Integer = 1
        Public Property Langue() As Integer
            Get
                Return Me._langue
            End Get
            Set(ByVal value As Integer)
                _langue = value
            End Set
        End Property
     
        Public ReadOnly Property ddl() As WebControls.DropDownList
            Get
                Return Me.ddlDistributeur
            End Get
        End Property
     
        Public ReadOnly Property lbl() As WebControls.Label
            Get
                Return Me.lblDistributeur
            End Get
        End Property
     
    #End Region
     
        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Me._cnxString = "" Then
                Me.lblDistributeur.Text = xL(4564, Me._langue, "Distributeur", Me._cnxString)
            Else
                Me.lblDistributeur.Text = "Distributeur"
            End If
            Me.mInitDropDownListDistributeur()
        End Sub
     
    End Class
    Lorsque j'ajoute ce contrôle dans la boîte à outils de visual studio pas de problèmes... quand je le "drag and drop" il me complète ma page aspx ainsi

    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
    <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="Default.aspx.vb" Inherits="BackOffice_DOTNET._Default" %>
     
    <%@ Register Assembly="bWebControls" Namespace="bWebControls" TagPrefix="cc1" %>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Page sans titre</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <cc1:cDistributeur ID="CDistributeur1" runat="server" />
        </div>
        </form>
    </body>
    </html>

    Donc pour moi tout est correcte...

    En revanche lorsque je lance la page j'ai une erreur NullReferenceException sur la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me.lblDistributeur.Text = "Distributeur"
    dans la fonction load du .ascx

    Je ne vois pas pourquoi...

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Je viens d'essayer une méthode bcp plus simple... la tienne nico_pyright

    En incluant un simple contrôle ascx dans le site web en cours ça roule

    ça suffira pour ce que j'ai à faire mais j'aurais voulu aller plus loin... créer une dll de contrôle utilisable sur tous les projets Web.


    Merci bcp

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    J'ai crié victoire trop vite...

    En fait, dans mon custom WebControl j'ai une DropDownList et un Label mais je n'arrive pas à y accéder dans la page qui contient mon custom WebControl, autrement dit l'instruction suivante contient toujours NULL...

    du coup je n'ai pas accès aux propriétés classique d'une dropDownListe comme .SelectedValue par exemple...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    En faisant une recherche sur le net, je pense que tu pourras trouver plein d'explication sur le comment utiliser les WebUserControl.

    D'abord, tu peux très bien créer un Project de type library et créer la dedans différentes class héritant de Control ou de nom de control existant.

    Ensuite, en ce qui concerne le WebUserControl (ascx), tu crées ton ascx avec une dropdown et un label, pour que ta page dans laquelle tu voudras utiliser ce webUserControl aie accès à ta dropdown ou à ton label, il va falloir créer des propriétés ou méthodes dans ton ascx.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    public string Text
    {
    get{return lbl.text;}
    set{lbl.text = value;}
    }
    La page n'as pas accès directement aux méthodes de la dropdown.

    Fix

  7. #7
    Nouveau membre du Club
    Inscrit en
    Octobre 2003
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 26
    Points : 29
    Points
    29
    Par défaut Petite précision
    The eyes ... Juste pour te faire une petite remarque, tu risque pas de trouver beaucoup d'aides en te trompant de rubrique, ici c'est le développement web avec C# / ASP.NET et non VB / ASP.NET.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    581
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2004
    Messages : 581
    Points : 633
    Points
    633
    Par défaut
    c'est pas trop grave, ici le probleme n'est pas le language mais l'utilisation

  9. #9
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    la méthode pour référence le controle utilisateur n'est pas bonne, il faut utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <%@ Register Src="~/monUserControl.ascx" TagName="MonUserControl" TagPrefix="UC" %>

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Avant tout merci tout le monde pour vos réponses.

    J'ai trouvé comment créer un WebControl Custom qui me permet d'atteindre toutes les propriétés de mes sous contrôles...

    Citation Envoyé par fix105 Voir le message
    En faisant une recherche sur le net, je pense que tu pourras trouver plein d'explication sur le comment utiliser les WebUserControl.
    Ben justement si je poste ici c'est qu'il n'y a pas de réponse satisfaisante sur le net que l'on peut trouver rapidement. Je te rassure avant de poster je fait toujours une recherche Google...

    Citation Envoyé par fix105 Voir le message
    D'abord, tu peux très bien créer un Project de type library et créer la dedans différentes class héritant de Control ou de nom de control existant.
    Oui puis tu peux aussi tout faire depuis Notepad et compiler à la main... ça marche aussi.
    ce que je soulignais c'est qu'il y a un projet "préconstruit" pour les UserControl et aucun pour les WebControl... Alors qu'on peut créer des bibiliothèques de WebControl.

    Citation Envoyé par fix105 Voir le message
    Ensuite, en ce qui concerne le WebUserControl (ascx), tu crées ton ascx avec une dropdown et un label, pour que ta page dans laquelle tu voudras utiliser ce webUserControl aie accès à ta dropdown ou à ton label, il va falloir créer des propriétés ou méthodes dans ton ascx.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public string Text
    {
    get{return lbl.text;}
    set{lbl.text = value;}
    }
    La page n'as pas accès directement aux méthodes de la dropdown.
    Ben en fait... ce que tu dis est vrai..et faux.
    En fait tu as raison s'il s'agit d'un WebControl .ascx classique (qui charge ces éléments dans le load de ton .ascx).

    En revanche il y a un moyen de pouvoir appeler toutes les propriétés des contrôles enfant si tu construit un WebControl de type composite.

    Je crois qu'il y a un article en cours de construction sur developper.com à propos des WebControl. J'espère qu'ils en parleront aussi.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    480
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 480
    Points : 357
    Points
    357
    Par défaut
    Citation Envoyé par olymat Voir le message
    The eyes ... Juste pour te faire une petite remarque, tu risque pas de trouver beaucoup d'aides en te trompant de rubrique, ici c'est le développement web avec C# / ASP.NET et non VB / ASP.NET.

    Désolé j'ai du faire un faux clic...

    Je voulais mettre ce sujet dans "Général DOTNET" à la base, car cela concerne plus la techno que le langage.

Discussions similaires

  1. Créer ses propres contrôles .NET
    Par The eye dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 01/02/2008, 17h48
  2. [Struts][Validator] : créer ses propre validator
    Par anaon dans le forum Struts 1
    Réponses: 3
    Dernier message: 10/05/2006, 07h19
  3. [Struts]créer ses propres tag struts
    Par jeb001 dans le forum Struts 1
    Réponses: 3
    Dernier message: 08/09/2005, 19h56
  4. Programme permettant de créer ses propres paquets TCP/UDP
    Par mat087 dans le forum Développement
    Réponses: 6
    Dernier message: 21/05/2004, 21h42

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