c# - 在自定义 ITemplate 中查找控件

标签 c# asp.net .net templates itemplate

我有一个使用简单 ITemplate 的自定义 UserControl:

<asp:Panel runat="server" ID="pnlExpander" CssClass="expander">
    <asp:HyperLink runat="server" ID="lnkExpand" Text="More Options" NavigateUrl="#" CssClass="lnkExpand"/>
    <asp:Panel runat="server" ID="pnlContent" CssClass="expanderContent" style="display: none">
        <asp:PlaceHolder runat="server" ID="plcContent"/>
    </asp:Panel>
</asp:Panel>

模板使用两个简单的属性呈现:

public class Expander {
    private ITemplate _contentTemplate;
        public ITemplate ContentTemplate {
            get { return _contentTemplate; }
            set { _contentTemplate = value; }
    }
    protected override void OnPreRender(EventArgs e) {
            if (ContentTemplate != null) {
                ContentTemplate.InstantiateIn(plcContent);
            }
    }

一切都正确显示,但我无法在模板中使用 FindControl。我从 VS intellisense 获得了对我的组合框的引用,但是在我实际加载页面时出现了一个编译错误,它是空的。

要在模板中找到组合框,我正在使用:

var cboFilterCriticality = AspNetUtils.FindControlRecursive(optionsExpander,"cboFilterCriticality") as DropDownList;

实际的模板在页面上看起来是这样的:

<l49:Expander runat="server" ID="optionsExpander">
    <ContentTemplate>
        ... other controls
            <asp:DropDownList ID="cboFilterCriticality" runat="server" ValidationGroup="filterGrid" DataTextField="Key" DataValueField="Value" />
    </ContentTemplate>
</l49:Expander>

最佳答案

我通过更改使用 ITemplate 的 UserControl 解决了这个问题。出于某种原因,它在 OnPreRender 中调用 InstantiateIn,这显然为时已晚,无法呈现页面中由 Page_Load 拾取的任何内容 - 请参阅 Page LifeCycle and UserControls (half way down) .我将 InstantiateIn 移动到 UserControl 中的 OnInit,问题自行解决。

关于c# - 在自定义 ITemplate 中查找控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10786712/

相关文章:

c# - 根据 ASP.NET MVC 4 Internet 应用程序登录中的用户角色重定向到不同的页面

javascript - 将一个 div 拖放到另一个 div 中

c# - NetworkStream 是否有 .ReadLine() 函数或类似的函数?

c# - 在数组中找到两个数字,使得它们的总和等于用户给出的数字

c# - 使用c#在excel中启用迭代计算模式?

c# - 如何使用起订量来断言在 C# 中调用函数?

c# - Gridview 什么时候有空数据源?

asp.net - .resx vs 数据库 vs 提供本地化/全局化的自定义解决方案

c# - 如何使用 .NET 将 byte[] 转换为字符串以生成与 SQL Server Convert format 1 或 2 相同的字符串?

.net - .NET 下的 File.Delete() 是原子的吗