Domanda

Sto avendo qualche difficoltà a trasmettere un oggetto di classe tra due parti Web (fornitore e consumatore). Fondamentalmente ogni volta che provo a costruire il mio progetto ottengo questo errore:

.

'collegabileWebParts.LinkButtonProvider.LinkButtonProvider.LinkButtonProvider' non implementa il membro dell'interfaccia "collegabileWebParts.isalObject.Salitem '

Ho raggiunto questo usando oggetti primitivi come stringhe, ma per qualche motivo ha problemi con la trasmissione di una classe che ha 3+ variabili di stringa.

Ho guardato oltre alcuni dei miei precedenti esempi per vedere se c'è qualcosa che mi manca, ma tutto sembra corretto. Quindi presumo che ci sia una differenza unica tra il trasferimento di oggetti primitivi e il trasferimento di oggetti di classe.

potrebbe davvero usare un secondo paio di occhi, o se qualcuno ha fatto questo prima sarebbe fantastico. Grazie per il tuo tempo.

Soluzione sotto.

Interfaccia

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

Class

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";
        }
    }
}
.

Provider

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();
        }
    }
}
.

Consumatore

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;
            }
        }
    }
}
.

Modifica: Haha hah!

si scopre quando si tratta di oggetti di classe che non ho nemmeno bisogno di usare un'interfaccia.
Sembrerebbe che un'interfaccia sia necessaria quando si tratta di oggetti primitivi (stringa, int, lunghe, ecc.) O Web parti di OOTB.

Così ho appena rimosso l'interfaccia dal progetto, ha sostituito tutte le mie chiamate al nome della classe stesso e impostare il mio fornitore solo ereditare da WebPart.

Ora funziona esattamente come volevo. Spero che altre persone possano usare queste informazioni. Inserire l

È stato utile?

Soluzione 2

Haha Hah!

si scopre quando si tratta di oggetti di classe che non ho nemmeno bisogno di usare un'interfaccia.
Sembrerebbe che un'interfaccia sia necessaria quando si tratta di oggetti primitivi (stringa, int, lunghe, ecc.) O Web parti di OOTB.

Così ho appena rimosso l'interfaccia dal progetto, ha sostituito tutte le mie chiamate al nome della classe stesso e impostare il mio fornitore solo ereditare da WebPart.

Ora funziona esattamente come volevo.Spero che altre persone possano usare queste informazioni. Inserire l

Altri suggerimenti

Potrei essere totalmente fuori su questo, ma penso che dovresti assicurarmi che il tuo oggetto (classe) supporti la serializzazione.

La serializzazione di base richiederebbe la marcatura della classe con l'attributo [serializable], ma potresti aver bisogno di qualcosa di più avanzato.Vedi qui per maggiori dettagli: http:// msdn.microsoft.com / IT-US / Biblioteca / 4ABF6K0% 28V= VS.90% 29.aspx

In ogni caso l'uso della serializzazione di base sarebbe abbastanza veloce da provare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top