C# 如何从cs文件在asp.net中设置模板?

C# 如何从cs文件在asp.net中设置模板?,c#,.net,asp.net,C#,.net,Asp.net,可以在cs文件中设置控件的ITemplate属性吗 在aspx文件中,我可以通过以下方式实现: <MyControl> <MyTemplate> <div> sample text, other controls </div> </MyTemplate> </MyControl> 示例文本、其他控件 真实场景中的该div如下所示: <div id="

可以在cs文件中设置控件的ITemplate属性吗

在aspx文件中,我可以通过以下方式实现:

<MyControl>
    <MyTemplate>
        <div>
        sample text, other controls
        </div>
    </MyTemplate>
</MyControl>

示例文本、其他控件
真实场景中的该div如下所示:

<div id="StatusBarDiv" runat="server" align="right">
    <table>
        <tr>
            <td>
                <dxe:ASPxLabel ID="Title" runat="server" Text="Records per page:">
                </dxe:ASPxLabel>
            </td>                    
            <td>
                <dxe:ASPxComboBox ID="cbxRecordsPerPage" ClientInstanceName="cbxRecordsPerPage" Width="50px" runat="server" SelectedIndex="<%#GetSelectedIndex()%>">
                    <Paddings PaddingBottom="0" PaddingTop="0" />
                    <Items>
                        <dxe:ListEditItem Text="10" Value="10" />
                        <dxe:ListEditItem Text="20" Value="20" />
                        <dxe:ListEditItem Text="30" Value="30" />
                        <dxe:ListEditItem Text="40" Value="40" />
                        <dxe:ListEditItem Text="50" Value="50" />
                    </Items>
                </dxe:ASPxComboBox>
            </td>
        </tr>
    </table>
</div>

这确实是可能的。您可以将实现的类的实例指定给代码隐藏文件中的模板属性:

public class YourTemplate: ITemplate
{
    public void InstantiateIn(Control container)
    {
        HtmlGenericControl div = new HtmlGenericControl("div");
        div.InnerText = "sample text, other controls";
        container.Controls.Add(div);
    }
}
然后,在
MyControl
类中:

protected override void OnLoad(EventArgs e)
{
    MyTemplate = new YourTemplate();
}
编辑:由于模板的内容非常复杂,手动创建其控件树不是很方便,正如我在上面的示例中所做的那样

最好将控件树宿主在中,并使用以下方法将该控件加载到模板中:


这就是我所说的,我将检查它是否正常,我将返回这里:)嗨,容器。页面为空:/@gruber,这很奇怪,在模板实例化时,您的包装器控件(MyControl实例)应该已经添加到页面中了。该控件是在页面标记中定义的还是通过代码添加的?
public class YourTemplate: ITemplate
{
    public void InstantiateIn(Control container)
    {
        Control userControl = container.Page.LoadControl("YourUserControl.ascx");
        container.Controls.Add(userControl);
    }
}