Отправить объект класса между веб-частями
-
10-12-2019 - |
Вопрос
У меня есть некоторые трудности, передающие объект класса между двумя веб-частями (поставщиком и потребителем). В основном, когда я пытаюсь построить свой проект, я получаю эту ошибку:
'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
В любом случае, используя базовую сериализацию, будет достаточно быстро, чтобы попробовать.