Question

J'ai une exigence pour la construction d'un rapport sur le budget qui a les mêmes domaines clés pour 6 catégories différentes. J'ai écrit une partie web visuelle qui tire un listitem pour chaque section et affiche les données ainsi que d'un bouton d'édition. Il y a aussi une propriété personnalisée dans le webpart pour stocker le type de budget:

 public class ProjectDetailsView : WebPart
    {
        // Visual Studio might automatically update this path when you change the Visual Web Part project item.
        private const string _ascxPath = @"~/_CONTROLTEMPLATES/SpecialProjectsProjectList/ProjectDetailsView/ProjectDetailsViewUserControl.ascx";

        [Personalizable(), WebBrowsable]
        public String BudgetType { get; set; }

        protected override void CreateChildControls()
        {
            ProjectDetailsViewUserControl control = Page.LoadControl(_ascxPath) as ProjectDetailsViewUserControl;
            //Control control = Page.LoadControl(_ascxPath);
            if (control != null)
            {
                control.WebPart = this;
            }

            Controls.Add(control);
        }
    }
}

J'ai ajouté ce wepart visuel 6 fois sur la même page. Il semble que seul le premier contrôle est en fait la propriété économiser sur mesure. Est-ce probablement une erreur dans le code, ou pouvez-vous pas le même webpart plusieurs fois sur la même page?

Je ne veux pas passer des heures de débogage si quelqu'un sait déjà que je dois créer un contrôle séparé par section. Un grand merci!

Était-ce utile?

La solution 2

J'ai maintenant découvert pourquoi je ne pouvais pas enregistrer les propriétés personnalisées dans l'interface graphique. Je fermais l'objet Web actuel du SPContext. Apparemment, cela ne devrait pas être fait comme il est géré par le cadre. Une fois que je l'ai enlevé mon CurrentSite.Dispose () de mon enfin dans le contrôle de l'utilisateur webpart, j'ai pu correctement enregistrer les propriétés personnalisées.

Autres conseils

Si vous allez mettre une partie Web sur une page plusieurs fois, chaque instance des besoins de partie Web pour avoir un identifiant unique. Voici un exemple de quelque chose que vous pouvez faire:

control.ID = this.ID + "_ProjectDetailsControl";

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top