Zar*_*ani 5 vb.net asp.net user-controls jquery-ui-dialog
我有一个asp.net usercontrol,它代表一个"弹出"对话框.基本上,它是jQuery UI对话框的包装器,可以将其子类化以轻松创建对话框.
作为此控件的一部分,我需要将一个div注入到控件所使用的页面中,或者在窗体的顶部或底部,以便在弹出实例化时,将其父级更改为此div.这允许"嵌套"弹出窗口,而子弹出窗口中没有子弹出窗口.
麻烦的是,我找不到一种安全的方法将这个div注入页面.用户控件没有preinit事件,所以我不能在那里执行,并且在Init,Load或PreRender中调用Page.Form.Controls.Add(...)会导致标准异常"控件集合无法修改在DataBind,Init,Load,PreRender或Unload阶段."
我以为我找到了一个解决方案......
ScriptManager.RegisterClientScriptBlock(Page, Me.GetType, UniqueID + "_Dialog_Div", containerDiv, False)
Run Code Online (Sandbox Code Playgroud)
...这似乎也工作正常,但最近同事试图把一个UpdatePanel对话框内,现在她得到的错误"类型'ASP.controls_order_viewzips_ascx’和重点登记的脚本标签"ctl00 $ ContentBody $ OViewZips_Dialog_Div具有无效脚本标签之外的字符:.只能注册格式正确的脚本标签."
你应该如何从用户控件内部向页面控件集合中添加控件?
我不确定为什么你真的需要将这个div添加到页面的表单中,但这应该有效:
Public Class WebUserControl1
Inherits System.Web.UI.UserControl
Private Sub UC_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
AddHandler Me.Page.Init, AddressOf Me.Page_Init
End Sub
Private Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs)
Dim dialogDiv As New Panel
dialogDiv.ID = "DialogDiv"
If Not Page.Form.Controls.Contains(dialogDiv) Then
Page.Form.Controls.AddAt(0, dialogDiv)
End If
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
如何在C#中实现它.我总是收到错误控件集合无法在Load,PreRender上修改我需要一个文字控件从用户控件添加到我的母版页头.文字控件将包含css链接.
是否要将文字添加到HeadContent主文件中的-ContentPlaceHolder控件或页面的标题(html头元素)?但是,我在这里展示了两者.
这是你的代码隐藏UserControl:
public partial class UC_AddToMaster : System.Web.UI.UserControl
{
private void Page_Init(object sender, System.EventArgs e)
{
this.Page.Init += UC_AddToMaster_Init;
}
private void UC_AddToMaster_Init(object sender, EventArgs e)
{
Literal literal = new Literal{ Text = "Hi World!" };
// if you want to add it to the header of the page:
if (!Page.Header.Controls.Contains(literal))
{
Page.Header.Controls.AddAt(0, literal);
}
// if you want to add it to the master's HeadContent ContentPlaceHolder control:
var siteMaster = Page.Master as SiteMaster;
if (siteMaster != null)
{
if (!siteMaster.Head.Controls.Contains(literal))
{
siteMaster.Head.Controls.AddAt(0, literal);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于HeadContent上面提到的方法,我在主人中提供了以下属性:
// in the master
public ContentPlaceHolder Head { get { return this.HeadContent; } }
Run Code Online (Sandbox Code Playgroud)
因此我需要将页面的主人转换为它的实际类型(SiteMaster这里)UserControl.否则我无法访问此属性.
| 归档时间: |
|
| 查看次数: |
17441 次 |
| 最近记录: |