>>>>现在的问题是,控件从Control派生时设计界面始终都是空空的,不管是否模板是否有内容,就只调用GetEmptyDesignTimeHtml的内容something is probably wrong with your designerthe following works for me:using System; using System.Web.UI; using System.Web.UI.WebControls; using System.ComponentModel; using System.Web.UI.Design;namespace SimpleControls { public class SimpleDesigner : System.Web.UI.Design.ControlDesigner { public override string GetDesignTimeHtml() { return "design time"; }
protected override string GetEmptyDesignTimeHtml() { return "empty"; //return base.GetEmptyDesignTimeHtml (); } } [DefaultProperty("Text"), ToolboxData("<{0}:TestSimple runat=server></{0}:TestSimple>"), Designer(typeof(SimpleDesigner)) ] public class TestSimple : System.Web.UI.Control //System.Web.UI.WebControls.WebControl { private string text; [Bindable(true),Category("Appearance"),DefaultValue("")] public string Text { get {return text;} set {text = value;} } protected override void Render(HtmlTextWriter output) { output.Write(Text); } } }try to see if you have anything... public override string GetDesignTimeHtml() { TidyList tl = (TidyList)Component; string designTimeHTML = null; IEnumerable designTimeDataSource = GetDesignTimeDataSource(5); try { tl.DataSource = designTimeDataSource; tl.DataBind(); System.Windows.Forms.MessageBox.Show(tl.Items.Count.ToString()); designTimeHTML = base.GetDesignTimeHtml(); } catch (Exception e) { designTimeHTML = GetErrorDesignTimeHtml(e); } finally { tl.DataSource = null; } return designTimeHTML; }
you meanthis shows 5:System.Windows.Forms.MessageBox.Show(tl.Items.Count.ToString()); but this is empty?designTimeHTML = base.GetDesignTimeHtml(); System.Windows.Forms.MessageBox.Show(designTimeHTML);
例如Attributes,Style,ControlStyle,Tag,Render时的支持等。如果你继承Control,那当然很多事情要自己做。
http://www.cnco.cn/vtest/tidylist/index.htm希望能发现错在那里。
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Web.UI.Design;namespace SimpleControls
{
public class SimpleDesigner : System.Web.UI.Design.ControlDesigner
{
public override string GetDesignTimeHtml()
{
return "design time";
}
protected override string GetEmptyDesignTimeHtml()
{
return "empty";
//return base.GetEmptyDesignTimeHtml ();
}
} [DefaultProperty("Text"),
ToolboxData("<{0}:TestSimple runat=server></{0}:TestSimple>"),
Designer(typeof(SimpleDesigner))
]
public class TestSimple : System.Web.UI.Control //System.Web.UI.WebControls.WebControl
{
private string text; [Bindable(true),Category("Appearance"),DefaultValue("")]
public string Text
{
get {return text;}
set {text = value;}
}
protected override void Render(HtmlTextWriter output)
{
output.Write(Text);
}
}
}try to see if you have anything...
public override string GetDesignTimeHtml()
{
TidyList tl = (TidyList)Component;
string designTimeHTML = null; IEnumerable designTimeDataSource = GetDesignTimeDataSource(5);
try
{
tl.DataSource = designTimeDataSource;
tl.DataBind();
System.Windows.Forms.MessageBox.Show(tl.Items.Count.ToString()); designTimeHTML = base.GetDesignTimeHtml();
}
catch (Exception e)
{
designTimeHTML = GetErrorDesignTimeHtml(e);
}
finally
{
tl.DataSource = null;
}
return designTimeHTML;
}
System.Windows.Forms.MessageBox.Show(designTimeHTML);
但如果控件WebControl派生。
designTimeHTML = base.GetDesignTimeHtml();
System.Windows.Forms.MessageBox.Show(designTimeHTML);
得到就是预期的内容。
控件要多个属性 PersistChildren(false),不然ItemTemplate为NULL ,子控件加不进去。
好象Control默认PersistChildren为true,而WebControl默认PersistChildren为false;