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 :

control dans une DLL + viewstate


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut control dans une DLL + viewstate
    Salut à tous
    j'ai créé une biblitheque de classes (dll) dans laquelle j'ai créé un webcontrol;
    Celui ci a pour but de servir de DebugConsole dans des applications AJAX, donc je voudrais pouvoir lui donner des infos à ajouter au fur et à mesure du chargement de la page ASP.NET...

    voici le code complet du webcontrol :

    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
     
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;
    using System.Web.UI.HtmlControls;
     
    namespace TSV_WebUtilities
    {
        [DefaultProperty("Text")]
        [ToolboxData("<{0}:WebDebugConsole runat=server></{0}:WebDebugConsole>")]
        public class WebDebugConsole : WebControl
        {
            [Bindable(true)]
            [Category("Appearance")]
            [DefaultValue("")]
            [Localizable(true)]
            string TextToDisplay;
            public string Content
            {
     
                get
                {
                    String s = (String)ViewState["DebugInfoContent"];
                    return ((s == null) ? String.Empty : s);
                }
     
                set
                {
                    ViewState["DebugInfoContent"] = value;
                }
            }
     
            public WebDebugConsole()
            {
     
            }
     
            static string DefaultBGcolor = "#ECECEC";
     
            string beginTable = "<table "
                + "border=1 "
                + "align='center' "
                + "style=\"background='" + DefaultBGcolor + "';\" "
                + "width='50%'"
                + "><tr><td><table width='100%'  cellspacing='0' >";
            string rowStart = "<tr "
                + "onmouseover=\"this.style.background='white';\" "
                + "onmouseout=\"this.style.background='" + DefaultBGcolor + "';\" "
                + "background=\"" + DefaultBGcolor + "\" "
                + "class=\"normal\">"
                + "<td style='margin:5px 5px 5px 5px '>";
            //string rowStart = "<tr><td>";
            string cellSeparator = "</td><td>";
            string rowEnd = "</td></tr>";
            string endTable = "</table></td></tr></table>";
     
            public void Write_Info(string info)
            {
                ViewState["DebugInfoType"] = "INFORMATION";
                ViewState["DebugInfoContent"] = info;
                ViewState["DebugInfoColor"] = "green";
                //WriteLog("INFORMATION", "" + info, "green");
            }
     
            public void Write_Warning(string info)
            {
                ViewState["DebugInfoType"] = "WARNING";
                ViewState["DebugInfoContent"] = info;
                ViewState["DebugInfoColor"] = "orange";
                //WriteLog("WARNING", info, "orange");
            }
     
            public void Write_Error(string info)
            {
     
                ViewState["DebugInfoType"] = "ERROR";
                ViewState["DebugInfoContent"] = info;
                ViewState["DebugInfoColor"] = "red";
                //WriteLog("ERROR", info, "red");
            }
     
            protected override void OnInit(EventArgs e)
            {
                base.OnInit(e);
            }
     
     
            protected override void OnLoad(EventArgs e)
            {
                //base.OnLoad(e);
                if (!Page.IsPostBack)
                {
                    TextToDisplay = "";
                    if (ViewState["DebugInfoType"] == null) ViewState["DebugInfoType"] = "";
                    if (ViewState["DebugInfoContent"] == null) ViewState["DebugInfoContent"] = "";
                    if (ViewState["DebugInfoColor"] == null) ViewState["DebugInfoColor"] = "";
                }
     
            }
     
            protected override void RenderContents(HtmlTextWriter output)
            {
                string InfoType = ViewState["DebugInfoType"].ToString();
                string info = ViewState["DebugInfoContent"].ToString();
                string color = ViewState["DebugInfoColor"].ToString();
     
                if (ViewState["ContentToStore"] == null) ViewState["ContentToStore"] = "";
                TextToDisplay = ViewState["ContentToStore"].ToString()
               + rowStart
               + "<font color=" + color + ">"
               + "*"
               + "</font>"
               + cellSeparator
               + "<font color=" + color + ">"
               + InfoType
               + cellSeparator
               + "<font color=" + color + ">"
               + DateTime.Now.ToLongTimeString()
               + "</font>"
               + cellSeparator
               + "<font color=" + color + ">"
               + info
               + "</font>"
               + rowEnd;
     
                #region output UserControl
                string FullContent = beginTable + TextToDisplay + endTable;
                ViewState["ContentToStore"] = TextToDisplay;
                output.Write(FullContent);
                #endregion
            }
        }
    }

    Mon problème principal est que j'arrive à insérer ma console debug dans ma page, mais par contre impossible de faire persister son viewstate !!

    Voici donc plusieurs question que je n'arrive pas à résoudre :

    -> Comment faire - si c'est possible - pour dire au contrôle de s'intégrer automatiquement en haut de la page dès qu'il est instancié, au lieu de le créer en dur dans la page ?

    -> comment lui faire persister le viewstate pour ne pas qu'il écrase les anciennes données à chaque postback ?

    pouvez-vous m'aider ?

    Bye
    Nico

  2. #2
    Membre Expert 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
    Par défaut
    salut,

    pourrais tu détailler ce que tu entends pas :

    Comment faire - si c'est possible - pour dire au contrôle de s'intégrer automatiquement en haut de la page dès qu'il est instancié, au lieu de le créer en dur dans la page ?
    Par ailleurs, pourrais tu nous mettre dans le code avec lequel tu utilises ton controle (le code de ta page surement)?

    Merci d'avance,

  3. #3
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut
    Salut

    Comment faire - si c'est possible - pour dire au contrôle de s'intégrer automatiquement en haut de la page dès qu'il est instancié, au lieu de le créer en dur dans la page ?
    En fait, je voudrais pouvoir ne rien coder en dur au niveau de l'aspx, mais créer le controle depuis le code behind directement au moment du chargement de la page, lors de l'instanciation de la classe; en gros je ne voudrais pas avoir à mettre en dur le controle dans le code ASPX; au lieu de cela, je voudrais juste qu'il s'ajoute automatiquement en haut de la page lorsque je fais mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WebDebugConsole DebgConsole; = new WebDebugConsole();
    pour pouvoir donner la DLL à quelqu'un et juste lui dire :
    tu n'as qu'à instancier la classe et l'utiliser; pas besoin de configurer quoi que ce soit en plus


    Concernant mes tentatives dans le code :

    - en haut de la page j'ai mis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NAMESPACECONTROL.WebDebugConsole DebgConsole;
    - dans le OnInit j'ai tenté un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(DebgConsole==null) DebgConsole = new WebDebugConsole();
    DebgConsole.ID="debugconsole";
    Page.Controls.Add(DebgConsole);





    Citation Envoyé par Arthis Voir le message
    salut,

    pourrais tu détailler ce que tu entends pas :

    Par ailleurs, pourrais tu nous mettre dans le code avec lequel tu utilises ton controle (le code de ta page surement)?

    Merci d'avance,

  4. #4
    Membre Expert 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
    Par défaut
    Je peux me tromper mais , si tu instancies un nouveau controle à chaque chargement de ta page, je ne suis pas sur que ton viewstate puisse conserver quoi que ce soit lors d'un postback.

    Je prefererais utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If (!ispostback)
        creation control, ajout à la page
    Par ailleurs, il faut que tu joues avec ton contrôle seulement à partir de l'evenement onpageload, car si tu stockes ton controle dans le viewstate, il ne sera recupéré d'une page sur l'autre qu'à partir de ce moment là.

    Voilà. dejá mes deux centimes d'euros, en espérant avoir pu t'aider un petit peu. N'hésites pas à revenir si ton probleme persiste avec d'autres questions..

  5. #5
    Membre éclairé Avatar de Nicopilami
    Profil pro
    Ingénieur sécurité
    Inscrit en
    Janvier 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Janvier 2009
    Messages : 354
    Par défaut eureka !
    merci Arthis pour tes réponses, et c'est suite à cela que j'ai trouvé la solution;
    En fait, il faut instancier une seule fois le controle, lors de OnInit

    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
     
     
       namespace_control.WebDebugConsole DebgConsole = null;
     
       protected override void OnInit(EventArgs e)
        {
     
     
            base.OnInit(e);
            if (DebgConsole == null)
            {
                DebgConsole = new WebDebugConsole();
                DebgConsole.EnableViewState = true;
                DebgConsole.ID = "DebugObject";
            }
            PageUtility.RecursiveFindControlByID(Page.Master, "DebugPlaceHolder").Controls.Add(DebgConsole);
     
        }
    et en plus j'ai un peu modifié le code :

    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
    141
    142
    143
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;
    using System.Web.UI.HtmlControls;
     
    namespace namespace_control
    {
        [DefaultProperty("Text")]
        [ToolboxData("<{0}:WebDebugConsole runat=server></{0}:WebDebugConsole>")]
        public class WebDebugConsole : WebControl
        {
            [Bindable(true)]
            [Category("Appearance")]
            [DefaultValue("")]
            [Localizable(true)]
     
            public string TextToDisplay
            {
     
                get
                {
                    String s = (String)ViewState["TextToDisplay"];
                    return ((s == null) ? String.Empty : s);
                }
     
                set
                {
                    ViewState["TextToDisplay"] = value;
                }
            }
     
     
            public WebDebugConsole()
            {
     
            }
     
     
            #region Parameters (color, table headers & footers ...)
            static string DefaultBGcolor = "#ECECEC";
     
            string beginTable = "<table "
                + "border=1 "
                + "align='center' "
                + "bgcolor=\"" + DefaultBGcolor + "\" "
                + "width='50%'"
                + "><tr><td style='margin:5px 5px 5px 5px' bordercolor=\"" + DefaultBGcolor + "\"><U><B>Debug Window</B></U></td></tr><tr><td><table width='100%'  cellspacing='0' >";
            string rowStart = "<tr "
                + "onmouseover=\"this.style.background='white';\" "
                + "onmouseout=\"this.style.background='" + DefaultBGcolor + "';\" "
                + "class=\"normal\">"
                + "<td style='margin:5px 5px 5px 5px'>";
     
            //string rowStart = "<tr><td>";
            string cellSeparator = "</td><td>";
            string rowEnd = "</td></tr>";
            string endTable = "</table></td></tr></table>";
     
            #endregion
     
            public void Write_Info(string info)
            {
                ViewState["DebugInfoType"] = "INFORMATION";
                ViewState["DebugInfoContent"] = info;
                ViewState["DebugInfoColor"] = "green";
                //WriteLog("INFORMATION", "" + info, "green");
                AddText();
            }
     
            public void Write_Warning(string info)
            {
                ViewState["DebugInfoType"] = "WARNING";
                ViewState["DebugInfoContent"] = info;
                ViewState["DebugInfoColor"] = "orange";
                //WriteLog("WARNING", info, "orange");
                AddText();
            }
     
            public void Write_Error(string info)
            {
     
                ViewState["DebugInfoType"] = "ERROR";
                ViewState["DebugInfoContent"] = info;
                ViewState["DebugInfoColor"] = "red";
                //WriteLog("ERROR", info, "red");
                AddText();
            }
     
     
            protected override void RenderContents(HtmlTextWriter output)
            {
     
                try
                {
     
                    #region output UserControl
                    string FullContent = beginTable + TextToDisplay + endTable;
                    output.Write(FullContent);
                    #endregion
                }
                catch (Exception exc)
                {
     
                    output.Write("<H2>ERROR IN THE CONTROL: </H2>" + exc.ToString());
                }
     
            }
            void AddText()
            {
     
                if (ViewState["DebugInfoType"] == null) ViewState["DebugInfoType"] = "";
                if (ViewState["DebugInfoContent"] == null) ViewState["DebugInfoContent"] = "";
                if (ViewState["DebugInfoColor"] == null) ViewState["DebugInfoColor"] = "";
                string InfoType = ViewState["DebugInfoType"].ToString();
                string info = ViewState["DebugInfoContent"].ToString();
                string color = ViewState["DebugInfoColor"].ToString();
                TextToDisplay = TextToDisplay
                      + rowStart
                      + "<font color=" + color + ">"
                      + "*"
                      + "</font>"
                      + cellSeparator
                      + "<font color=" + color + ">"
                      + InfoType
                      + cellSeparator
                      + "<font color=" + color + ">"
                      + DateTime.Now.ToLongTimeString()
                      + "</font>"
                      + cellSeparator
                      + "<font color=" + color + ">"
                      + info
                      + "</font>"
                      + rowEnd;
            }
     
     
        }
    }

    et ca fonctionne :o)
    merci encore, et à bientôt !
    Nico

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

Discussions similaires

  1. [MDI][DLL] Enfant MDI dans une dll
    Par Pascal Jankowski dans le forum Composants VCL
    Réponses: 5
    Dernier message: 02/04/2004, 07h41
  2. [VStudio 6] pb avec fonctions dans une DLL
    Par MogDeChNord dans le forum MFC
    Réponses: 8
    Dernier message: 08/01/2004, 08h57
  3. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36
  4. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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