我想创建一个具有子项的自定义/用户控件.
例如,我希望我的控件具有以下标记:
<div runat="server" id="div">
<label runat="server" id="label"></label>
<div class="field">
<!-- INSERT CHILDREN HERE -->
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
当我想在页面上使用它时,我只需:
<ctr:MyUserControl runat="server" ID="myControl">
<span>This is a child</span>
<div runat="server" id="myChild">And another <b>child</b>
</ctr:MyUserControl>
Run Code Online (Sandbox Code Playgroud)
我的用户控件中的子控件将被插入到我的用户控件中.完成此任务的最佳方法是什么?
该功能类似于asp:PlaceHolder,但我想添加更多选项以及其他标记等.子页面控件仍然需要能够被页面访问.(在上面的例子中,页面上应该有myChild控件)
编辑------
它可以是模板控件,只要它允许我引用页面上的子项.
我搜索过该网站,但我无法找到解决问题的方法,所以如果已经得到解答,我会道歉(我确定有人必须先问过这个问题).
我编写了一个jQuery Popup窗口,我将其打包为WebControl和IScriptControl.最后一步是能够在我的控件的标签内写入标记.我已经使用了InnerProperty属性几次,但仅用于包含强类型类的列表.
这是我在WebControl上的属性:
[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public something??? Content
{
get
{
if (_content == null)
{
_content = new something???();
}
return _content;
}
}
private something??? _content;
Run Code Online (Sandbox Code Playgroud)
这是我所追求的HTML标记:
<ctr:WebPopup runat="server" ID="win_Test" Hidden="false" Width="100px" Height="100px"
Modal="true" WindowCaption="Test Window" CssClass="window">
<Content>
<div style="display:none;">
<asp:Button runat="server" ID="Button1" OnClick="Button1_Click" />
</div>
<%--Etc--%>
<%--Etc--%>
</Content>
</ctr:WebPopup>
Run Code Online (Sandbox Code Playgroud)
不幸的是我不知道我的Content属性应该是什么类型.我基本上需要复制UpdatePanel的ContentTemplate.
编辑:所以以下允许自动创建一个模板容器,但没有控件出现,我正在做什么错了?
[PersistenceMode(PersistenceMode.InnerProperty)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ITemplate Content
{
get
{
return _content;
}
set
{
_content = value;
}
}
private ITemplate …Run Code Online (Sandbox Code Playgroud)