我有一个代表“弹出”对话框的asp.net用户控件。基本上,它是jQuery UI对话框的包装器,可以被子类化以轻松创建对话框。
作为此控件的一部分,我需要将一个div注入到使用该控件的页面中,无论是在表单的顶部还是底部,以便在实例化弹出窗口时,其父级更改为此div。这允许“嵌套”的弹出窗口,而不会使子弹出窗口被困在父弹出窗口中。
问题是,我找不到一种安全的方法来将此div注入到页面中。用户控件没有preinit事件,因此我无法在那里执行操作,在Init、Load或PreRender中调用Page.Form.Controls.Add(...)会导致标准异常“The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases.”
我曾经认为通过使用...找到了解决方案。
作为此控件的一部分,我需要将一个div注入到使用该控件的页面中,无论是在表单的顶部还是底部,以便在实例化弹出窗口时,其父级更改为此div。这允许“嵌套”的弹出窗口,而不会使子弹出窗口被困在父弹出窗口中。
问题是,我找不到一种安全的方法来将此div注入到页面中。用户控件没有preinit事件,因此我无法在那里执行操作,在Init、Load或PreRender中调用Page.Form.Controls.Add(...)会导致标准异常“The control collection cannot be modified during DataBind, Init, Load, PreRender or Unload phases.”
我曾经认为通过使用...找到了解决方案。
ScriptManager.RegisterClientScriptBlock(Page, Me.GetType, UniqueID + "_Dialog_Div", containerDiv, False)
最近一个同事试图在对话框中放置UpdatePanel,但出现了错误:“为类型'ASP.controls_order_viewzips_ascx'和键'ctl00$ContentBody$OViewZips_Dialog_Div'注册的脚本标记具有脚本标记之外的无效字符:。只有格式正确的脚本标记才能被注册。”
如何从用户控件内部向页面控件集合添加控件?
MasterPage
是Page
的子控件,因此实际上只有页面会有一个头部,主控件将与内容页合并。因此,它使用页面的Header
属性,如上所示。如果您仍想访问主控件的头部控件,可以使用与HeadContent
相同的方法。因此,您需要为主控件的头部分配一个ID。然后,您可以添加一个返回此头部的属性:public System.Web.UI.HtmlControls.HtmlHead Head { get { return this.MasterHead; } }
。用户控件中的部分与HeadContent
相同。 - Tim Schmelter