웹 파트간에 클래스 객체를 보냅니다
-
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"; } } }
공급자
.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; } } } }
편집 : 하하 하!
클래스 객체를 처리 할 때 밖으로 나가면 인터페이스를 사용할 필요조차하지 않습니다.
프리미티브 객체 (String, int, long 등) 또는 OOTB 웹 파트를 다룰 때 인터페이스가 필요합니다.프로젝트에서 인터페이스를 제거하고 모든 내 호출을 클래스 이름 자체로 대체하고 공급자가 WebPart에서 상속 된 것으로 설정합니다.
이제는 내가 원하는 것처럼 정확하게 작동합니다. 다른 사람들 이이 정보를 사용할 수 있기를 바랍니다.
해결책 2
하하!
클래스 객체를 처리 할 때 밖으로 나가면 인터페이스를 사용할 필요조차하지 않습니다.
프리미티브 객체 (String, int, long 등) 또는 OOTB 웹 파트를 다룰 때 인터페이스가 필요합니다.
프로젝트에서 인터페이스를 제거하고 모든 내 호출을 클래스 이름 자체로 대체하고 공급자가 WebPart에서 상속 된 것으로 설정합니다.
이제는 내가 원하는 것처럼 정확하게 작동합니다.다른 사람들 이이 정보를 사용할 수 있기를 바랍니다.
다른 팁
나는 이것을 완전히 벗어날 수 있지만, 객체 (클래스)가 직렬화를 지원하는지 확인해야한다고 생각한다.
기본적인 직렬화는 [Serializable] 속성을 사용하여 클래스를 표시해야하지만보다 고급 기능이 필요할 수 있습니다.자세한 내용은 여기를 참조하십시오. http : // msdn.microsoft.com / en-us / library / 4abbf6k0 % 28v= vs.90 % 29.aspx
기본 직렬화를 사용하는 경우에도 충분히 빠르게 시도 할 수 있습니다.