Вопрос

У меня есть некоторые трудности, передающие объект класса между двумя веб-частями (поставщиком и потребителем). В основном, когда я пытаюсь построить свой проект, я получаю эту ошибку:

'connectablewebparts.linkbuttonprovider.linkbuttonprovider.linkbuttonprovider' не реализует участник интерфейса 'ConnectableWebparts.isalObject.salitem'

Я достиг этого с помощью примитивных объектов, таких как строки, но по какой-то причине у него есть проблемы с передачей класса, который имеет более 3 строковых переменных.

Я посмотрел на некоторые из моих предыдущих примеров, чтобы увидеть, есть ли что-то, что я скучаю, но все выглядит правильно. Поэтому я предполагаю, что существует некоторая уникальная разница между передачей примитивных объектов и передачи объектов класса.

действительно может использовать вторую пару глаз, или если кто-то сделал это до этого, это было бы здорово. Спасибо за ваше время.

Решение ниже.

Интерфейс

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

класс

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

Потребитель

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

<Сильные> Редактировать: Хаха ха!

Оказывается при работе с объектами класса, мне даже не нужно использовать интерфейс.

Казалось бы, когда требуется интерфейс при работе с примитивными объектами (строка, int, длинные и т. Д.) или веб-частями OOTB.

Поэтому я только что удалил интерфейс из проекта, заменил все мои звонки на саму название класса и установите мой провайдер только на наследование из WebPart.

Теперь это работает точно так же, как я хотел. Я надеюсь, что другие люди могут использовать эту информацию. Введите описание изображения здесь

Это было полезно?

Решение 2

Хаха ха!

Оказывается при работе с объектами класса, мне даже не нужно использовать интерфейс.

Казалось бы, когда требуется интерфейс при работе с примитивными объектами (строка, int, длинные и т. Д.) или веб-частями OOTB.

Поэтому я только что удалил интерфейс из проекта, заменил все мои звонки на саму название класса и установите мой провайдер только на наследование из WebPart.

Теперь это работает точно так же, как я хотел.Я надеюсь, что другие люди могут использовать эту информацию. Введите описание изображения здесь

Другие советы

Я мог бы быть полностью выключен на это, но я думаю, что вы должны убедиться, что ваш объект (класс) поддерживает сериализацию.

Базовая сериализация потребует отметки класса с атрибутом [Serializable], но вам может понадобиться что-то более продвинутое.Подробнее см. Здесь для получения более подробной информации: http:// msdn.microsoft.com / en-us / library / 4Abbf6k0% 28v= vs.90% 29.aspx

В любом случае, используя базовую сериализацию, будет достаточно быстро, чтобы попробовать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top