本帖最后由 hrabeyond 于 2009-11-24 09:09:53 编辑

解决方案 »

  1.   

    你的控件有没输出HTML代码的render
      

  2.   


    protected override void Render(HtmlTextWriter writer)
    {
    if (this.DesignMode)
    this.tb.Text = "在此输入邮件地址";
    writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
    writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
    writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
    writer.RenderBeginTag(HtmlTextWriterTag.Table); writer.RenderBeginTag(HtmlTextWriterTag.Tr);
    writer.RenderBeginTag(HtmlTextWriterTag.Td);
    this.lb.RenderControl(writer);
    writer.RenderEndTag(); writer.RenderBeginTag(HtmlTextWriterTag.Td);
    this.tb.RenderControl(writer);
    writer.RenderEndTag(); if (String.IsNullOrEmpty(this.ValidateExpression) == false && this.DesignMode == false)
    {
    writer.RenderBeginTag(HtmlTextWriterTag.Td);
    this.rev.RenderControl(writer);
    writer.RenderEndTag();
    }
    writer.RenderEndTag();
    writer.RenderEndTag();
    }
      

  3.   

    呵呵,不好意思啊,CSDN上的私信系统就是这么烂。。刚看到。我帮你顶下吧,这玩意我也搞不定,陪你等高手
      

  4.   

    属性应该放在viewstate里面吧,,不然系统如何帮你维护,,控件视图状态..
      

  5.   

    set 
    {
     this.name=value
    }
    去除:
    [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]  然后重新编译开启viewstate 试试,
      

  6.   

    具体怎么做?我要把值存入ViewState么?
      

  7.   

    to:老风
    还有郑健老师说的:"复杂属性一般没有set 语句,因为一般是对复杂属性的子属性(或子对象)赋值,只要保证它的子属性(子对象)中具有get/set 语句即可。"
    我是这么理解的,在PersonTest中name、intAge这两个属性都是自动属性,都有对应的getset方法,于是乎呢,在控件类中就没有必要去写set方法了,不知道这么理解对不对。所以你说的set{this.name=value}这个东西应该放在哪?要是放在PersonTest这个类中不用自动属性呢?有什么区别么?
      

  8.   


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Text;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;namespace Controls
    {
        [DefaultProperty("personTest")]
        [ToolboxData("<{0}:WebCustomControl runat=server></{0}:WebCustomControl>")]
        public class WebCustomControl : WebControl
        {        private PersonTest _personTest;
            [Description("测试属性")]
            [Category("测试属性")]
            [PersistenceMode(PersistenceMode.Attribute)]
            [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
            public Controls.PersonTest personTest
            {
                get
                {
                    if (_personTest == null)
                    {
                        _personTest = new PersonTest();
                    }
                    return _personTest;
                }        }
            protected override void Render(HtmlTextWriter writer)
            {
                if (this.DesignMode)
                {
                    writer.Write("<span>" + personTest.Name + "</span>");                writer.Write("<span><b>" + personTest.IntAge.ToString() + "</b></span>");
                }
            }
        }    [TypeConverter(typeof(ExpandableObjectConverter))]
        public class PersonTest
        {
            private string name;
            [Description("名称")]
            [NotifyParentProperty(true)]
            public string Name
            {
                get { return name; }
                set { name = value; }
            }        private int intAge;
            [Description("年龄")]
            [NotifyParentProperty(true)]
            public int IntAge
            {
                get { return intAge; }
                set { intAge = value; }
            }
        }}
    我写的一个,,试了下可以修改后在界面上显示,注意加上[NotifyParentProperty(true)]
      

  9.   

    to:pengyi_205
    果然是[NotifyParentProperty(true)]的问题,我在PersonTest的自动属性前加上[NotifyParentProperty(true)]就好用了,谢谢!
      

  10.   

      [NotifyParentProperty(true)]