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 :

Custom WebControl : erreurs


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2006
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juillet 2006
    Messages : 130
    Par défaut Custom WebControl : erreurs
    Bonjour,

    J'essai de faire mon premier Custom WebControl, et je me heurte à plusieurs problèmes.

    Il s'agit d'un composant de recherche de communes à partir d'une partie du nom de la commune ou du code postal ou du code insee.
    nota : ce composant existe déjà en user control, mais pour eviter de le redévelopper dans chaque application, je souhaiterais le passer en custom.
    Ce n'est donc pas sur la partie recherche que je bloque mais sur la partie "différente" du au fait qu'il s'agit d'un custom webcontrol.

    Le composant est composé ainsi visuellement :
    - Un entête (classique avec bouton de fermeture), type fenêtre windows.
    - un label indiquant "Recherche la commune à partir du (intégration liste déroulante)"
    - une textbox (qui pourra par la suite être adapté au type de recherche, exemple : limité à 5 caractère dans le cas du code postal ou insee)
    - une grille de sélection
    - 3 boutons (rechercher,annuler,valider)

    il est prévu 3 comportements :
    - Via l'interface de sélection non pré-rempli (exemple : un bouton issu d'un formulaire appel le composant, l'utilisateur tape sa/ses recherches et sélectionne son résultat.) les 3 infos (commune,code postal et code insee résultantes sont récupérable)
    - via l'interface de sélection pré-rempli (exemple : le type de recherche et déja défini, la recherche aussi, le résultat est affiché, mais on peut modifier pour affiner/corriger la recherche) (idem ci dessus pour la récupération)
    - Sans interface, les variables sont remplies, le résultat est accessible via le datatable utilisé pour la grille.

    J'ai donc créer quelques propriétés accessible via le designer, et j'aurais aussi voulu voir l'interface "construite" dans le designer (si la propriété d'interface de sélection est sur True) sinon une boite tel que l'on a en mettant des usercontrol doit s'afficher.

    Les problèmes que j'ai sont les suivants :
    - j'ai par moment à la place de mon composant dans le designer "Erreur lors de la création du controle...impossible de définir 'test' pour la propriété 'strEntete'
    Valeur que j'ai saisie via la propriété du designer.
    - Je n'ai pas de visuel du contenu de mon composant (bouton,textbox...)

    Je vous remercie pour votre aide, ci dessous le code :
    Je suis suis sous VS 2005 / Vb.net

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
     
    Imports System
    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Text
    Imports System.Web
    Imports System.Web.UI
    Imports System.Web.UI.WebControls
     
     
    <DefaultProperty("Text"), ToolboxData("<{0}:WclRecherche runat=server></{0}:WclRecherche>")> _
    Public Class WclRecherche
        Inherits WebControls.Panel
     
        Public Enum TypeRecherche
            NomCommune
            CodePostal
            CodeInsee
        End Enum
     
     
        Protected lRecherche As Label = New Label
        Protected tbRecherche As TextBox = New TextBox
        Protected btRecherche As Button = New Button
     
     
        <Bindable(True), Category("Interface"), DefaultValue(GetType(String), Nothing), _
        DisplayName("Entête"), Browsable(True), _
        Description("Texte figurant sur l'entête de l'interface")> _
        Property strEntete() As String
            Get
                Dim s As String = CStr(ViewState("strEntete"))
                If s Is Nothing Then
                    Return String.Empty
                Else
                    Return s
                End If
            End Get
     
            Set(ByVal Value As String)
                ViewState("strEntete") = Value
            End Set
        End Property
     
        <Bindable(False), Category("Entrée"), Browsable(True), _
        DisplayName("Type de recherche"), _
         DefaultValue(TypeRecherche.NomCommune), _
         Description("Recherche à partir de différentes entrées disponibles.")> _
         Property Type_Source_Recherche() As TypeRecherche
            Get
                Return ViewState("TypeRecherche")
            End Get
            Set(ByVal value As TypeRecherche)
                ViewState("TypeRecherche") = value
            End Set
        End Property
     
        <Bindable(False), Category("Interface"), Browsable(True), DefaultValue(True), _
        DisplayName("Interface de sélection"), _
        Description("Faut-il afficher une interface de sélection ?")> _
        Property ysnInterfaceSelection() As Boolean
            Get
                Return ViewState("ysnInterfaceSelection")
            End Get
            Set(ByVal value As Boolean)
                ViewState("ysnInterfaceSelection") = value
            End Set
        End Property
     
     
        <Bindable(False), Category("Interface"), DefaultValue("Valider"), _
        DisplayName("Texte du bouton de validation"), _
        Description("Texte affiché sur le bouton de validation.")> _
        Property btValidText() As String
            Get
                Dim s As String = CStr(ViewState("btValidText"))
                If s Is Nothing Then
                    Return String.Empty
                Else
                    Return s
                End If
            End Get
     
            Set(ByVal Value As String)
                ViewState("btValidText") = Value
            End Set
        End Property
     
        <Bindable(False), Category("Interface"), DefaultValue("Annuler"), _
      DisplayName("Texte du bouton d'annulation"), _
      Description("Texte affiché sur le bouton de validation.")> _
      Property btCancelText() As String
            Get
                Dim s As String = CStr(ViewState("btCancelText"))
                If s Is Nothing Then
                    Return String.Empty
                Else
                    Return s
                End If
            End Get
     
            Set(ByVal Value As String)
                ViewState("btCancelText") = Value
            End Set
        End Property
     
     
        Protected Overrides Sub CreateChildControls()
            Controls.Clear()
     
            lRecherche.Text = "Recherche"
            btRecherche.Text = "Rechercher"
     
            Me.Controls.Add(lRecherche)
            Me.Controls.Add(tbRecherche)
            Me.Controls.Add(btRecherche)
     
        End Sub
     
     
        Protected Overrides Sub RenderContents(ByVal output As HtmlTextWriter)
            CreateChildControls()
            'Me.BackColor = Drawing.Color.AliceBlue
            'Me.BorderStyle = WebControls.BorderStyle.Dotted
            'Me.BorderColor = Drawing.Color.Red
            'Me.BorderWidth = Unit.Pixel(1)
     
     
            Me.RenderChildren(output)
            output.Write(strEntete & "tt")
     
            'output.Write("TEST")
        End Sub
     
     
    #Region "Traitement"
     
    #End Region
     
    End Class

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 8
    Par défaut
    Salut,

    Déjà désolé pour les exemples à suivre car ceux ci seront en C# et non VB

    Pour moi tu as différentes solutions :

    1) Tu peux overrider ton Render du contrôle, en faisant un test sur la propriété DesignMode (booleen qui t'indique si tu es en mode design). A ce moment, tu genere le HTML que tu veux selon les propriétés et le designer t'affichera ça gentillement

    2) Tu peux créer une une classe héritant de ControlDesigner. Celle ci te fournira une méthode GetDesignTimeHtml qui comme son nom l'indique, retournera le HTML du mode design. Avec ceci tu pourras créer des interactions complexe avec ton controle (ex : afficher un menu contextuelle avec une checkbox pour définir un booleen, menu similaire aux controles fournis de base avec ASP.NET). A ce moment tu dois spécifier à ton controle quelle classe designer utiliser, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [ToolboxData("<{0}:TonControle runat=server></{0}:TonControle >"), Designer(typeof(TonControleDesigner))]
        public class TonControle : WebControl, INamingContainer


    Petite remarque : pour moi le contenu de rendercontents est mal placé, tu devrais overrider la méthode render, dans laquelle tu ajouteras tes attributs sur le contrôle, et aussi, ne pas appeler manuellement CreateChildControls

    Voilà, en espérant t'avoir un peu aider ;-)

Discussions similaires

  1. Custom WebControl : LoadPostData pas apellé
    Par Sergejack dans le forum ASP.NET
    Réponses: 2
    Dernier message: 13/03/2012, 09h00
  2. Custom WebControl et ViewState !
    Par V3lkin dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/06/2008, 11h06
  3. [2.0/C#] custom dérivée de WebControl
    Par CUCARACHA dans le forum ASP.NET
    Réponses: 1
    Dernier message: 02/10/2006, 20h53
  4. [C#] Erreur de codeDom pour un custom control
    Par padodanle51 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/04/2006, 11h27
  5. [JSP] page d'erreur custom
    Par mlequim dans le forum Servlets/JSP
    Réponses: 13
    Dernier message: 30/11/2005, 13h05

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