none
msg erreur à chaque reconnection sur une page WebPart RRS feed

  • Question

  • Bonjour à vous tous

    Je pensais enfin avoir réussi a mettre en place mes deux webparts "Annuaire" et "Detail"( une liste + un detail ) et finalement je me heurte a qq chsoe de "bizarre"
    Quand je me connecte la premiere fois sur la webpart que je viens de déployer , ma liste (issue de la bdd) s'affiche bien ... je clique sur le bouton détail et mon line se fait bien aussi ... j'arrive sur ma page détail avec les infos du bon identifiant ..
    Mais si je cliques sur un autre lien de ma page d'acceuil pour aller consulter une autre page ... lorsque je reveins sur la page d'acceuil et que j'esaie d'acceder à ma web part "Annuaire", je tombe sytematiquement, sur ce message :
    --------------------------

    La référence d'objet n'est pas définie à une instance d'un objet.

    Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Détails de l'exception: System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.

    Erreur source:

    Une exception non gérée s'est produite lors de l'exécution de la demande Web actuelle. Les informations relatives à l'origine et l'emplacement de l'exception peuvent être identifiées en utilisant la trace de la pile d'exception ci-dessous.

    Trace de la pile:

    [NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.]
       WebPart_SpGview_Pagin_et_rech.WebPart1.CreateChildControls() +417
       System.Web.UI.Control.EnsureChildControls() +145
       System.Web.UI.Control.PreRenderRecursiveInternal() +60
       System.Web.UI.Control.PreRenderRecursiveInternal() +223
       System.Web.UI.Control.PreRenderRecursiveInternal() +223
       System.Web.UI.Control.PreRenderRecursiveInternal() +223
       System.Web.UI.Control.PreRenderRecursiveInternal() +223
       System.Web.UI.Control.PreRenderRecursiveInternal() +223
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3393
    
    ----------------------------------------------
    j'ai essayé plusierus fois de réinstaller mes 2 webparts , et à chaque fois le meme phénomène se produit. Ca fonctionne tant que je sors pas de ma page. Des que je vais voir ailleurs, impossible de le réutiliser  !!!!

    voici mes deux pages codées :
    LA WEB PART LISTE :
    namespace WebPart_SpGview_Pagin_et_rech { [Guid("c5e4f7ec-61aa-4b7b-9803-134c61118313")] public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart { SPGridView oGrid = new SPGridView(); // datcontext LINQ DataClasses1DataContext ledatc; // nom du site SPWebApplication wa = SPWebApplication.Lookup(new Uri(SPContext.Current.Web.Url)); Label titreWP = new Label(); Label nbLig = new Label(); BoundField colname; BoundField colname1; BoundField colname2; BoundField colname3; BoundField colname4; String topClicBouton = ""; Button boutfonc = new Button(); Button boutAll = new Button(); TextBox byname = new TextBox(); TextBox byfonc = new TextBox(); SPLinkButton ledetail = new SPLinkButton(); public WebPart1() { this.ExportMode = WebPartExportMode.All; } void oGrid_PageIndexChanging(object sender, GridViewPageEventArgs e) { this.oGrid.PageIndex = e.NewPageIndex; oGrid.DataSource = ledatc.NomEtFonction(byfonc.Text.ToUpper(), byname.Text.ToUpper()); this.oGrid.DataBind(); } void oGrid_RowEditing(Object sender, GridViewEditEventArgs e) { var lesite = wa.Name; //Enregistrement de l'objet session HttpContext.Current.Session["SeSS_idSelect"] = oGrid.Rows[e.NewEditIndex].Cells[5].Text; // passage id par session : oGrid.Page.Response.Redirect("monurl/mapage.aspx?PageView=Shared"); } void cleanColonneID(Object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { // masque la colonne identifiant e.Row.Cells[5].Visible = false; } } public void critFoncSearchZone(object sender, EventArgs e) { // gestion de la recherche affinée par critères (nom ou fonction) topClicBouton = "y"; oGrid.DataSource = ledatc.NomEtFonction(byfonc.Text.ToUpper(), byname.Text.ToUpper()); oGrid.DataBind(); } public void critAll(object sender, EventArgs e) { // gestion de la recherche totale byname.Text = ""; byfonc.Text = ""; topClicBouton = "y"; // remise à zero de l'index pour retourner au début de la selection this.oGrid.PageIndex = 0; this.oGrid.DataSource = ledatc.vueTestAlainPortailSharePoint_AnnuaireGenepi; this.oGrid.DataBind(); } protected override void CreateChildControls() { //HttpContext.Current.Session["SeSS_idSelect"] = ""; titreWP.Text = "Nom du webPart : projets / WebPart_SpGView_Pagin et Rech <br>"; this.Controls.Add(titreWP); // CODE POUR ACCES VIA WEB CONFIG ET CONNECTIONSTRING // acces connection string SPWebApplication wa = SPWebApplication.Lookup(new Uri(SPContext.Current.Web.Url)); var config = WebConfigurationManager.OpenWebConfiguration("/", wa.Name); string _sqlConnectionString = config.ConnectionStrings.ConnectionStrings["GENEPI_PRODConnectionString"].ToString(); // instance du data context LINQ ledatc = new DataClasses1DataContext(_sqlConnectionString); // gestion de l'évènement click sur le bouton "recherche"(ok) boutfonc.Click += (critFoncSearchZone); // gestion de l'évènement click sur le bouton "recherche"(tout selectionner) boutAll.Click += (critAll); if (topClicBouton != "y") { this.oGrid.DataSource = ledatc.vueTestAlainPortailSharePoint_AnnuaireGenepi; } // CONCEPTION DU TABLEAU haut // conception de la presentation html --> retirée pour plus de visibilité


    // obligatoire a false : spgridview ne gere pas l autogenerateColumns this.oGrid.AutoGenerateColumns = false; this.oGrid.AlternatingRowStyle.BackColor = Color.Bisque; //-------------------- LE BOUTON DETAIL ButtonField thebut = new ButtonField(); thebut.ButtonType = ButtonType.Link; thebut.HeaderText = "Action"; thebut.CommandName ="Edit"; thebut.Text = "Detail"; this.oGrid.Columns.Add(thebut); //-------------------- FIN BOUTON DETAIL colname = new BoundField(); colname.DataField = "firstname"; colname.HeaderText = "prenom"; colname.ConvertEmptyStringToNull = true; this.oGrid.Columns.Add(colname); colname4 = new BoundField(); colname4.DataField = "fonction"; colname4.HeaderText = "Fonction"; colname4.ConvertEmptyStringToNull = true; this.oGrid.Columns.Add(colname4); // masqué en utilisant l'objet RowDataBound puis la procedure "cleanColonneID" colname3 = new BoundField(); colname3.DataField = "ContactID"; //colname3.HeaderText = "Id"; //colname3.Visible = false; colname3.ConvertEmptyStringToNull = true; this.oGrid.Columns.Add(colname3); this.Controls.Add(oGrid); //Pagination this.oGrid.PageSize = 10; this.oGrid.AllowPaging = true; this.oGrid.PageIndexChanging += new GridViewPageEventHandler(oGrid_PageIndexChanging); this.oGrid.PagerTemplate = null; // Must be called after Controls.Add(oGrid) // gestion du clic sur le bouton detail this.oGrid.RowEditing += new GridViewEditEventHandler(oGrid_RowEditing); // gestion par objet RowDataBound pour ajouter une procedure sur l'evenement avant de charger le spGridView this.oGrid.RowDataBound += new GridViewRowEventHandler(cleanColonneID); this.oGrid.DataBind(); base.CreateChildControls(); } } }
    et
    namespace wp_FicheDetailGeneral
    {
        [Guid("f3898e2e-6c59-4cfd-a108-649b0b86a041")]
        public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart
        {
            public string ident = "";
            public int pos = 0;
            public int lgurl = 0;
            public int debident = 0;
            public int finident = 0;
            public string identifiant = "";
            public int identifiantINT = 0;
            Label letitre = new Label();
            
            
            public WebPart1()
            {
                this.ExportMode = WebPartExportMode.All;
            }
    
            protected override void CreateChildControls()
            {
                
                //Lecture de l'objet session
                identifiant = HttpContext.Current.Session["SeSS_idSelect"].ToString();
    
    
                if (identifiant != "")
                {
                    identifiantINT = int.Parse(identifiant);
                    DataClasses1DataContext ledatc = new DataClasses1DataContext();
    
                    //letitre.Text = identifiantINT.ToString();
                    //this.Controls.Add(letitre);
    
                    // objet detail view
    
                    DetailsView ledetail = new DetailsView();
                    ledetail.DataSource = ledatc.proc_detailGeneral(identifiantINT);
                    ledetail.AutoGenerateRows = true;
                    ledetail.HeaderText = "detail du contact";
                    ledetail.AlternatingRowStyle.BackColor = Color.AntiqueWhite;
                    ledetail.EmptyDataText = "pb sur zone vide";
                    ledetail.EmptyDataRowStyle.BackColor = Color.Red;
                    
    
                    ledetail.DataBind();
                    this.Controls.Add(ledetail);
                    
                }
                else
                {
                    letitre.Text = "pas d'id correspondant ...";
                    this.Controls.Add(letitre);
                }
                base.CreateChildControls();
               
            }
        }
    }
    une fois de plus je boucle sur une erreur ... 
    je ne comprend pas pourquoi ça marche tres bien au départ et que je perd la maitrise de cette webpart des
    que je clic sur au autre lien (j'ai pensé à un pb de l'utilisation de l'objet session ... mais mêê en le retriant j'ai le meme mess d'erreur
    Merci d'avance pour vos conseils si vous voyez ce que j'ai pu oublier
    Bonne journée
    ALain
    lundi 21 décembre 2009 09:44

Réponses

  • Bonjour Alain,

    difficile de vous répondre, le plus simple serait de débugger votre code sur votre machine virtuelle de développement.

    Voici comment faire :

    - Avec Visual Studio, compilez votre assembly en mode Debug
    - Déployez la dans le GAC, à la main ou en ligne de commande : C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe -if monassembly.dll
    iisreset.exe
    - Avec votre navigateur, naviguez sur n'importe quelle page. Cela reveillera le serveur.
    - Attachez vous avec visual studio au processus w3wp.exe (menu Debug, Attacher au processus)
    Vous pouvez aussi déployer le projet avec F5 si c'est un projet réalisé avec les extensions Visual Studio pour SharePoint, au lieu d'effectuer les 4 étapes précédentes
    - Mettez un point d'arret dans votre code (placez le curseur sur la première ligne de CreateChildControls, et appuyez sur F9)
    - Via le navigateur, provoquez l'affichage de la web part

    Visual Studio devrait alors arrêter l'exécution sur votre point d'arret. Vous pourrez faire avancer l'execution ligne par ligne, et observer la valeur des différentes variables.
    D'après le message d'erreur, votre code exploite une méthode ou propriété d'un objet qui est vide. Il reste à trouver laquelle et à comprendre pourquoi.

    Vous verrez ce n'est pas aussi difficile que ça en a l'air ;)
    http://blogs.developpeur.org/anouvel
    Merci de valider les réponses qui correspondent à votre problème afin qu'il apparaisse comme résolu.
    • Proposé comme réponse Arnault Nouvel mardi 22 décembre 2009 22:00
    • Marqué comme réponse algeox mercredi 23 décembre 2009 10:40
    mardi 22 décembre 2009 21:47

Toutes les réponses

  • Bonjour Alain,

    difficile de vous répondre, le plus simple serait de débugger votre code sur votre machine virtuelle de développement.

    Voici comment faire :

    - Avec Visual Studio, compilez votre assembly en mode Debug
    - Déployez la dans le GAC, à la main ou en ligne de commande : C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe -if monassembly.dll
    iisreset.exe
    - Avec votre navigateur, naviguez sur n'importe quelle page. Cela reveillera le serveur.
    - Attachez vous avec visual studio au processus w3wp.exe (menu Debug, Attacher au processus)
    Vous pouvez aussi déployer le projet avec F5 si c'est un projet réalisé avec les extensions Visual Studio pour SharePoint, au lieu d'effectuer les 4 étapes précédentes
    - Mettez un point d'arret dans votre code (placez le curseur sur la première ligne de CreateChildControls, et appuyez sur F9)
    - Via le navigateur, provoquez l'affichage de la web part

    Visual Studio devrait alors arrêter l'exécution sur votre point d'arret. Vous pourrez faire avancer l'execution ligne par ligne, et observer la valeur des différentes variables.
    D'après le message d'erreur, votre code exploite une méthode ou propriété d'un objet qui est vide. Il reste à trouver laquelle et à comprendre pourquoi.

    Vous verrez ce n'est pas aussi difficile que ça en a l'air ;)
    http://blogs.developpeur.org/anouvel
    Merci de valider les réponses qui correspondent à votre problème afin qu'il apparaisse comme résolu.
    • Proposé comme réponse Arnault Nouvel mardi 22 décembre 2009 22:00
    • Marqué comme réponse algeox mercredi 23 décembre 2009 10:40
    mardi 22 décembre 2009 21:47
  • merci Arnault
    Je vais essayer cela et je vous dis ce que ça donne
    Bonne journée et Bonne fêtes à vous si l'on ne se recroise pas ici d'ici là
    Alain
    mercredi 23 décembre 2009 07:39
  • Aie aie j'ai honte  !!!!
    Mon pb venait d'un mauvais lien en fait (que j'avais en plus retirer du code que j'ai soumis ici pour plus de visibilité !!!) et du coup en cliquant sur ce lien, j'activai une webpart dans laquelle j'avais laissé certaines lignes d'appels aux objets en commentaire ....
    sans jeu de mots , j'ai envie de rajouter "NO COMMENT !!!!!!!!! "
    mERCI en tout cas Arnault car une fois de plus , vous m'avez bien orienter et j'ai encore appris qq chose grâce à vous.

    Je vous souhaite de joyuese fêtes ainsi qu' à tous les gens qui passent ici et qui font de leur mieux pour nous aider
    Alain

    mercredi 23 décembre 2009 10:45
  • Ravi d'avoir pu vous aider :)

    Joyeux noël et à bientôt
    http://blogs.developpeur.org/anouvel
    Merci de valider les réponses qui correspondent à votre problème afin qu'il apparaisse comme résolu.
    jeudi 24 décembre 2009 10:44