如何动态创建MaskedEditExtender?

时间:2008-09-17 12:59:30

标签: asp.net maskededitextender

我想从codebehind创建一些屏蔽的编辑扩展器。类似的东西:

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对我不起作用。

修改:我没有更新面板。事实证明,我还需要在服务器端指定目标控件。

3 个答案:

答案 0 :(得分:1)

您的示例未提供TargetControlID。

页面上是否有updatePanel?我在动态创建扩展程序时遇到了问题,因为它们没有被添加到updatePanel内容中。

我还认为你必须使用ScriptManager做一些事情(注册扩展程序)但我可能会弄错(我现在无法访问我做动态扩展程序的代码)。

答案 1 :(得分:1)

如果它在Page子类中,请参见ASP.NET Page Life Cycle Overview。如果向下滚动到事件列表,该页面会建议您使用PreInit事件来创建任何动态控件。有必要尽早做到这一点,以确保ASP.NET在正确的阶段干净地加载ViewState,等等。

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

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

答案 2 :(得分:0)

向MaskedEditExtender提供正确的TargetControlID值