문제

두 개의 웹 파트 (공급자 및 소비자) 사이에서 클래스 객체를 전송하는 데 몇 가지 어려움을 겪고 있습니다. 기본적으로 프로젝트를 작성하려고 할 때 마다이 오류가 발생합니다.

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

기본 직렬화를 사용하는 경우에도 충분히 빠르게 시도 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 sharepoint.stackexchange
scroll top