不是说一般复杂属性没有set访问器吗?只要保证字属性有get/set就可以了,为什么复杂内部嵌套属性没有set,在页面中使用时就会报错呢?而连字符串形式的复杂属性就不能有set。
private Person person;
        [Category("复杂属性")]
        [Description("复杂属性")]
        [PersistenceMode(PersistenceMode.InnerProperty)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public Person Person
        {
            get {
                if (person==null)
                {
                    person = new Person();                    
                }
                return person; }
           // set { person = value; }//这个set注释掉在页面使用时就出错
        }复杂内部嵌套属性

解决方案 »

  1.   

    这是我的Person类: [TypeConverter(typeof(ExpandableObjectConverter))]
        public class Person
        {
            private string text;
            [NotifyParentProperty(true)]
            public string Text
            {
                get { return text; }
                set { text = value; }
            }
            private string value;
            [NotifyParentProperty(true)]
            public string Value
            {
                get { return this.value; }
                set { this.value = value; }
            }
        }控件代码如下:[DefaultProperty("Text")]
        [ToolboxData("<{0}:InnerProperty runat=server></{0}:InnerProperty>")]    public class InnerProperty : WebControl
        {
            private Person person;
            [Category("复杂属性")]
            [Description("复杂属性")]
            [PersistenceMode(PersistenceMode.InnerProperty)]
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
            public Person Person
            {
                get {
                    if (person==null)
                    {
                        person = new Person();                    
                    }
                    return person; }
                //set { person = value; }
            }页面中使用时,编译报错:
    类型ServerControl1.ServerControl1中不存在类型名称"Person“
    把set取消注释就可以了,就是弄不明白,这个set不是在复合属性中一般需要的吗?只要子属性有get/set就行了
      

  2.   

    public Person Person
            {
                get {
                    if (person==null)
                    {
                        person = new Person();                    
                    }
                    return person; }
                //set { person = value; }
            }