如何动态创建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并在其中执行此操作。
如果没有帮助,请发布更完整的代码示例。