如何动态创建MaskedEditExtender?

时间:2020-03-05 18:58:46  来源:igfitidea点击:

我想从背后的代码创建一些蒙版的编辑扩展器。就像是:

private MaskedEditExtender m_maskedEditExtender;
protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);
    m_maskedEditExtender = new MaskedEditExtender()
    {
        BehaviorID = "clientName"
    };
    m_maskedEditExtender.Mask = "999999999";
    this.Controls.Add(m_maskedEditExtender);
}
protected override void Render(HtmlTextWriter writer)
{
    m_maskedEditExtender.RenderControl(writer);
}

当我这样做时,我在MaskedEditExtender的OnLoad上收到NullReferenceException。正确的做法是什么?请注意,将扩展器放入类似中继器的控件中并使用DataBind对我不起作用。

编辑:我没有更新面板。原来,我还需要在服务器端指定一个目标控件。

解决方案

回答

示例未提供TargetControlID。

页面上有updatePanel吗?由于没有将扩展程序添加到updatePanel内容中,因此无法动态创建扩展程序。

我还认为我们必须对ScriptManager做些事情(注册扩展程序),但我可能会误会(目前我无法访问动态扩展程序的代码)。

回答

如果这在Page子类中,请参见ASP.NET Page生命周期概述。如果向下滚动到事件列表,则该页面建议我们使用PreInit事件创建任何动态控件。有必要尽早这样做,以确保ASP.NET在正确的阶段干净地加载ViewState等。

但是,如果我们是在Web用户控件或者自定义控件中执行此操作,请覆盖CreateChildControls并在其中执行此操作。

如果没有帮助,请发布更完整的代码示例。