Pregunta

Tengo algunas dificultades para transmitir un objeto de clase entre dos partes web (proveedor y consumidor). Básicamente, siempre que trato de construir mi proyecto, obtengo este error:

'conectablewebparts.linkbuttonprovider.linkbuttonprovider' no implementa el miembro de la interfaz 'conectablewebparts.isalobject.salitem'

He logrado esto utilizando objetos primitivos, como las cuerdas, pero por alguna razón tiene problemas para transmitir una clase que tiene más variables de cadena.

He mirado algunos de mis ejemplos anteriores para ver si hay algo que me estoy perdiendo, pero todo se ve correcto. Así que asumo que hay una diferencia única entre la transferencia de objetos primitivos y transferir objetos de clase.

realmente podría usar un segundo par de ojos, o si alguien lo ha hecho antes de eso sería genial. Gracias por su tiempo.

Solución a continuación.

Interfaz

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

clase

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

Proveedor

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

consumidor

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

Editar: Jaja jajaja

Resulta cuando se trata de objetos de clase, ni siquiera necesito usar una interfaz.
Parecería que se requiere una interfaz cuando se trata de objetos primitivos (cadena, int, larga, etc.) o partes web de OOTB.

Por lo tanto, acabo de eliminar la interfaz del proyecto, reemplazó todas mis llamadas al nombre de la clase en sí, y configurar a mi proveedor para que solo hereda desde WebPart.

Ahora funciona exactamente como si lo quería. Espero que otras personas puedan usar esta información. ingrese la descripción de la imagen aquí

¿Fue útil?

Solución 2

jaja jaja!

Resulta cuando se trata de objetos de clase, ni siquiera necesito usar una interfaz.
Parecería que se requiere una interfaz cuando se trata de objetos primitivos (cadena, int, larga, etc.) o partes web de OOTB.

Por lo tanto, acabo de eliminar la interfaz del proyecto, reemplazó todas mis llamadas al nombre de la clase en sí, y configurar a mi proveedor para que solo hereda desde WebPart.

Ahora funciona exactamente como si lo quería.Espero que otras personas puedan usar esta información. ingrese la descripción de la imagen aquí

Otros consejos

Podría estar totalmente apagado en esto, pero creo que tendrá que asegurarse de que su objeto (clase) sea compatible con la serialización.

La serialización básica requeriría marcar la clase con el atributo [Serializable], pero es posible que necesite algo más avanzado.Consulte AQUÍ para obtener más detalles: http:// msdn.Microsoft.com / EN-EE. UU. / Library / 4ABBF6K0% 28V= vs.90% 29.aspx

En cualquier caso, utilizando la serialización básica sería lo suficientemente rápida para probar.

Licenciado bajo: CC-BY-SA con atribución
scroll top