我有一个自己写的控件:
#region 基本类
/// <summary>
/// 基本类
/// </summary>
[DefaultProperty("myText")]
public class Div : Control
{
/// <summary>
/// 通知运行时所在的页面
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)
{
Page.RegisterRequiresControlState(this);
base.OnInit(e);
}
[CategoryAttribute("Appearance")] /// <summary>
/// 输出文本信息
/// </summary>
public string myText
{
get
{
String s = (String)ViewState["myText"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["myText"] = value;
}
} /// <summary>
/// 设置css外调信息
/// </summary>
public string myClass
{
get
{
String s = (String)ViewState["myClass"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["myClass"] = value;
}
} /// <summary>
/// 设置style
/// </summary>
public string myStyle
{
get
{
String s = (String)ViewState["myStyle"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["myStyle"] = value;
}
} /// <summary>
/// 设置打开方式,不设置使用默认打开方式
/// </summary>
public string myTarget
{
get
{
String s = (String)ViewState["myTarget"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["myTarget"] = value;
}
} /// <summary>
/// 指定连接路径
/// </summary>
public string myUrl
{
get
{
String s = (String)ViewState["myUrl"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["myUrl"] = value;
}
}
/// <summary>
/// 设置调用的SQL字符串,请对照数据库填写
/// </summary>
public string mySql
{
get
{
String s = (String)ViewState["mySql"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["mySql"] = value;
}
} protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, myClass);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.Write(myText);
writer.RenderEndTag();
} }
#endregion
现在想要做一个复合控件,将上面的控件,想要调用两个上面的Div作为子控件,可以对子控件进行属性设置和调用: #region 显示切换标签
/// <summary>
/// 显示tab导航切换
/// </summary>
[ToolboxData("<{0}:Tabber runat=server></{0}:Tabber>")] [ParseChildren(false),PersistChildren(true)]
public class Tabber:Control
{
/// <summary>
/// 设置主菜单
/// </summary>
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public Div myHeader
{
get
{
Div head = (Div)ViewState["myHeader"];
return ((head == null) ? new Div() : head);
} set
{
ViewState["myHeader"] = value;
}
} /// <summary>
/// 设置子菜单
/// </summary>
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public Div myBody
{
get
{
Div body = (Div)ViewState["myBody"];
return ((body == null) ? new Div() : body);
} set
{
ViewState["myBody"] = value;
}
} protected override void Render(HtmlTextWriter writer)
{
writer.Write(myHeader.myText+myBody.myText);
} }
#endregion前台调用代码:
<cbb:Tabber ID="Tabber1" runat="server">
<myHeader myClass="TabTitle" myStyle="color: #FFFFFF;height: 24px;background-color: #0099ff;" runat="server" myText="这是一个导航主菜单"></myHeader>
<myBody myClass="TabContent" myStyle="font-size: 12px;color: #333333;background-color: #99ccff;height: 30px;" runat="server" myText="这是一个导航子菜单"></myBody>
</cbb:Tabber>结果没有提示错误,也没有内容显示出来,请大家帮忙修改一下,多谢!100分送上
#region 基本类
/// <summary>
/// 基本类
/// </summary>
[DefaultProperty("myText")]
public class Div : Control
{
/// <summary>
/// 通知运行时所在的页面
/// </summary>
/// <param name="e"></param>
protected override void OnInit(EventArgs e)
{
Page.RegisterRequiresControlState(this);
base.OnInit(e);
}
[CategoryAttribute("Appearance")] /// <summary>
/// 输出文本信息
/// </summary>
public string myText
{
get
{
String s = (String)ViewState["myText"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["myText"] = value;
}
} /// <summary>
/// 设置css外调信息
/// </summary>
public string myClass
{
get
{
String s = (String)ViewState["myClass"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["myClass"] = value;
}
} /// <summary>
/// 设置style
/// </summary>
public string myStyle
{
get
{
String s = (String)ViewState["myStyle"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["myStyle"] = value;
}
} /// <summary>
/// 设置打开方式,不设置使用默认打开方式
/// </summary>
public string myTarget
{
get
{
String s = (String)ViewState["myTarget"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["myTarget"] = value;
}
} /// <summary>
/// 指定连接路径
/// </summary>
public string myUrl
{
get
{
String s = (String)ViewState["myUrl"];
return ((s == null) ? String.Empty : s);
} set
{
ViewState["myUrl"] = value;
}
}
/// <summary>
/// 设置调用的SQL字符串,请对照数据库填写
/// </summary>
public string mySql
{
get
{
String s = (String)ViewState["mySql"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["mySql"] = value;
}
} protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, myClass);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.Write(myText);
writer.RenderEndTag();
} }
#endregion
现在想要做一个复合控件,将上面的控件,想要调用两个上面的Div作为子控件,可以对子控件进行属性设置和调用: #region 显示切换标签
/// <summary>
/// 显示tab导航切换
/// </summary>
[ToolboxData("<{0}:Tabber runat=server></{0}:Tabber>")] [ParseChildren(false),PersistChildren(true)]
public class Tabber:Control
{
/// <summary>
/// 设置主菜单
/// </summary>
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public Div myHeader
{
get
{
Div head = (Div)ViewState["myHeader"];
return ((head == null) ? new Div() : head);
} set
{
ViewState["myHeader"] = value;
}
} /// <summary>
/// 设置子菜单
/// </summary>
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public Div myBody
{
get
{
Div body = (Div)ViewState["myBody"];
return ((body == null) ? new Div() : body);
} set
{
ViewState["myBody"] = value;
}
} protected override void Render(HtmlTextWriter writer)
{
writer.Write(myHeader.myText+myBody.myText);
} }
#endregion前台调用代码:
<cbb:Tabber ID="Tabber1" runat="server">
<myHeader myClass="TabTitle" myStyle="color: #FFFFFF;height: 24px;background-color: #0099ff;" runat="server" myText="这是一个导航主菜单"></myHeader>
<myBody myClass="TabContent" myStyle="font-size: 12px;color: #333333;background-color: #99ccff;height: 30px;" runat="server" myText="这是一个导航子菜单"></myBody>
</cbb:Tabber>结果没有提示错误,也没有内容显示出来,请大家帮忙修改一下,多谢!100分送上
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, myClass);
writer.AddAttribute(HtmlTextWriterAttribute.Style, myStyle);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
//插入head
writer.AddAttribute(HtmlTextWriterAttribute.Class, "TabTitle");
writer.AddAttribute(HtmlTextWriterAttribute.Style, myHeader.myStyle);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.Write(myHeader.myText);
writer.RenderEndTag();
//插入body
writer.AddAttribute(HtmlTextWriterAttribute.Class, "TabContent");
writer.AddAttribute(HtmlTextWriterAttribute.Style, myBody.myStyle);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.Write(myBody.myText);
writer.RenderEndTag();
writer.RenderEndTag();
}
protected override void Render(HtmlTextWriter writer)
{
writer.AddAttribute(HtmlTextWriterAttribute.Class, myClass);
writer.AddAttribute(HtmlTextWriterAttribute.Style, myStyle);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
//插入head
writer.AddAttribute(HtmlTextWriterAttribute.Class, "TabTitle");
writer.AddAttribute(HtmlTextWriterAttribute.Style, myHeader.myStyle);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.Write(myHeader.myText);
writer.RenderEndTag();
//插入body
writer.AddAttribute(HtmlTextWriterAttribute.Class, "TabContent");
writer.AddAttribute(HtmlTextWriterAttribute.Style, myBody.myStyle);
writer.RenderBeginTag(HtmlTextWriterTag.Div);
writer.Write(myBody.myText);
writer.RenderEndTag();
writer.RenderEndTag();
}
直接将属性写在控件里得了