写了一个自定义控件,生成dll,加到工具箱中,当拖到页面上时,只显示3个#号,但运行没问题问题:如何作到,当拖到页面上时显示控件本身的内容?如何自定义?

解决方案 »

  1.   

    控件的Render方法有内容吗
    控件的构造函数里初始化相关属性了吗
      

  2.   

    /// <summary>           /// 将此控件呈现给指定的输出参数。           /// </summary>           /// <param name="output"> 要写出到的 HTML 编写器 </param>            protected override void Render(HtmlTextWriter output)           {                output.Write(Text);           }
      

  3.   

    按说应该转为Design模式声明Designer类型,由它输出设计时的样子。不过如果自己用用,并且不怕运行时的程序拿到设计时会出错(因为设计时属性等不能保证正确)或者拖垮设计起(例如很慢地访问数据库),你就可以写:protected override void Render(HtmlTextWriter output)  
    {  
      this.EnsureChildControls();
      ....... //例如:base.Render(output);
    }
      

  4.   

    设计器不是浏览器。因此在设计时,asp.net并不并不调用PreRender,也就不会调用 EnsureChildControls 来创建内部控件。例如DataGrid,设计时它并不访问运行时的数据库,而是仅仅显示一个“假想”的数据,同时也不创建真正的内部(模板)控件,就是这个道理。
      

  5.   

    protected override void Render(HtmlTextWriter output)           {                output.Write(Text);           }
    这样子写,当控件托到页面时外观显示是我上面代码输出的的文字,但是运行时控件也显示此文字,应该显示本身的内容才对
      

  6.   

    你自定义控件没有重写Render方法?
    Web控件的呈现都是靠Render方法的内容的
      

  7.   

    render,rendcontent,要有相应的操作
      

  8.   

    protected override void Render(HtmlTextWriter output)
    {
    //在Panel中绘制表格
    output.AddAttribute(HtmlTextWriterAttribute.Border,"0");
    output.AddAttribute(HtmlTextWriterAttribute.Cellpadding,"0");
    output.AddAttribute(HtmlTextWriterAttribute.Cellspacing,"0");
    output.AddAttribute(System.Web.UI.HtmlTextWriterAttribute.Width,"100%");
    output.AddAttribute(System.Web.UI.HtmlTextWriterAttribute.Height,"100%");
    output.Write(javascript);
    output.RenderBeginTag(HtmlTextWriterTag.Table);
    output.RenderBeginTag(HtmlTextWriterTag.Tr);
    output.RenderBeginTag(HtmlTextWriterTag.Td);
    this.m_LabelField.RenderBeginTag(output);
    output.Write(this.m_LabelField.Text);
    output.RenderEndTag();
    output.RenderBeginTag(HtmlTextWriterTag.Td);
    output.RenderBeginTag(HtmlTextWriterTag.Table);
    output.RenderBeginTag(HtmlTextWriterTag.Tr);
    output.RenderBeginTag(HtmlTextWriterTag.Td);
    this.m_ImageUp.RenderControl(output);
    }
    m_ImageUp,m_LabelField 是自己在当前类中定义的Image,Lable控件
    output提供了很多方法,使你能在后台代码中生出HTML代码.
      

  9.   

    引用using System.ComponentModel命名空间
    为每个你想定义的属性写下相关代码
            [Bindable(true), Category("Appearance"), DefaultValue(typeof(Unit), ""), Description("The Border Width")]
            public override Unit BorderWidth
            {
                get
                {
                    object o = ViewState["BorderWidth"];
                    return ((o == null) ? Unit.Empty : (Unit)o);
                }
                set
                {
                    if (value.Value < 0)
                        throw new ArgumentOutOfRangeException("value");
                    ViewState["BorderWidth"] = value;
                }
            }
    类似于上面...
    如有误导,找我领导..
      

  10.   

    自定义控件在设计时呈现的内容是设计器取自这个控件的Designer的GetDesignTimeHtml方法返回的html字符串,如果没有为控件添加设计时支持,那么设计器会调用控件的Render方法,然后将控件的内容呈现出来。如果你要自定义设计时控件呈现的内容,就需要自己为控件写一个Designer,从ControlDesigner或其子类继承,然后重写它的GetDesignTimeHtml方法,在这个方法中返回你要呈现的内容即可。================================
    AspNetPager免费分页控件:www.webdiyer.com
      

  11.   

    http://blog.csdn.net/yls087412/archive/2006/08/07/1029643.aspx
    看看这里,一定能解决你的问题