Question

J'ai une difficulté à transmettre un objet de classe entre deux parties Web (fournisseur et consommateur). Fondamentalement chaque fois que j'essaie de construire mon projet, je reçois cette erreur:

'ConnectedwebParts.LinkButtonProvider.LinkButtonProvider' N'emplente pas Membre d'interface "ConnectableWebParts.isalObject.Salitem '

J'ai obtenu cela à l'aide d'objets primitifs tels que des chaînes, mais pour une raison quelconque, il a des problèmes de transmission d'une classe qui a plus de variables de chaîne.

J'ai regardé certains de mes exemples précédents pour voir s'il manque quelque chose, mais tout semble correct. Je suppose donc qu'il existe une différence unique entre le transfert d'objets primitifs et le transfert d'objets de classe.

pourrait vraiment utiliser une deuxième paire d'yeux, ou si quelqu'un l'a fait avant cela serait formidable. Merci pour votre temps.

Solution ci-dessous.

interface

namespace ConnectableWebParts
{
    public interface ISalObject
    {
        SalObject SalItem { get; set; }
    }
}

classe

namespace ConnectableWebParts
{
    public class SalObject
    {
        private string name;
        private string description;
        private string code;

        public string Name { get { return name; } set { name = value; } }
        public string Description { get { return description; } set { description = value; } }
        public string Code { get { return code; } set { code = value; } }

        public SalObject() {
            name = "";
            description = "";
            code = "000000";
        }

        public void storeDate()
        {
            Name = "John Doe";
            Description = "Good Omen";
            Code = "111111";
        }
    }
}

fournisseur

namespace ConnectableWebParts.LinkButtonProvider
{
    [ToolboxItemAttribute(false)]
    public partial class LinkButtonProvider : WebPart, ISalObject
    {
        private SalObject _salvage = new SalObject();

        [Personalizable()]
        public SalObject Salvage {
            get { return _salvage; }
            set { _salvage = value; }
        }

        [ConnectionProvider("Provider for SalObject From LinkButton", "SalObjectProvider")]
        public ISalObject SalObjectProvider()
        {
            return this;
        }

        public LinkButtonProvider()
        {
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            InitializeControl();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected void LinkButton1_Click(object sender, EventArgs e)
        {
            Salvage = new SalObject();
        }
    }
}

consommateur

namespace ConnectableWebParts.LinkButtonConsumer
{
    [ToolboxItemAttribute(false)]
    public partial class LinkButtonConsumer : WebPart
    {
        private ISalObject _myProvider;

        [ConnectionConsumer("SalObject Consumer", "SalObjectConsumer")]
        public void SalvageConsumer(ISalObject Provider)
        {
            _myProvider = Provider;
        }

        public LinkButtonConsumer()
        {
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            InitializeControl();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
        }

        protected override void OnPreRender(EventArgs e)
        {
            EnsureChildControls();
            if (_myProvider != null)
            {
                NameCell.Text = _myProvider.SalItem.Name;
                DescCell.Text = _myProvider.SalItem.Description;
                CodeCell.Text = _myProvider.SalItem.Code;
            }
        }
    }
}

edit: Haha hah!

s'avère lorsqu'il s'agit d'objets de classe, je n'ai même pas besoin d'utiliser une interface.
Il semblerait qu'une interface est requise lorsqu'il s'agirait d'objets primitifs (chaîne, int, long, etc.) ou des pièces Web Ootb.

Donc, je viens de supprimer l'interface du projet, remplacé tous mes appels au nom de la classe lui-même et définissez mon fournisseur pour hériter uniquement de WebPart.

maintenant ça marche exactement comme je le voulais. J'espère que d'autres personnes peuvent utiliser ces informations. Entrez la description de l'image ici

Était-ce utile?

La solution 2

haha hah!

s'avère lorsqu'il s'agit d'objets de classe, je n'ai même pas besoin d'utiliser une interface.
Il semblerait qu'une interface est requise lorsqu'il s'agirait d'objets primitifs (chaîne, int, long, etc.) ou des pièces Web Ootb.

Donc, je viens de supprimer l'interface du projet, remplacé tous mes appels au nom de la classe lui-même et définissez mon fournisseur pour hériter uniquement de WebPart.

maintenant ça marche exactement comme je le voulais.J'espère que d'autres personnes peuvent utiliser ces informations. Entrez l'image Description ici

Autres conseils

Je pourrais être totalement hors de cela, mais je pense que vous devriez vous assurer que votre objet (classe) prend en charge la sérialisation.

La sérialisation de base nécessiterait de marquer la classe avec l'attribut [Serializable], mais vous pourriez avoir besoin de quelque chose de plus avancé.Voir ici pour plus de détails: http:// msdn.microsoft.com / fr-US / US / Bibliothèque / 4ABBF6K0% 28V= vs.0% 29.aspx

Dans tous les cas à l'aide de la sérialisation de base serait suffisamment rapide pour essayer.

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