加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 从用户控件内添加页面控件集合

发布时间:2020-12-16 03:37:05 所属栏目:asp.Net 来源:网络整理
导读:我有一个asp.net usercontrol,它代表一个“弹出”对话框.基本上,它是jQuery UI对话框的包装器,可以将其子类化以轻松创建对话框. 作为此控件的一部分,我需要将一个div注入到控件所使用的页面中,或者在窗体的顶部或底部,以便在弹出实例化时,将其父级更改为此di
我有一个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)

…它似乎正常工作,但最近一位同事试图在对话框中放置一个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

How to implement it in C#. I’m always getting the error The control
collection cannot be modified on Load,PreRender
I need a Literal Control to be added to my master page’s head from a user control. The literal control will contain the css link.

是否要将文字添加到主文件中的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);
            }
        }
    }
}

对于上面提到的HeadContent方法,我在master中提供了以下属性:

// in the master
public ContentPlaceHolder Head { get { return this.HeadContent; } }

因此,我需要在UserControl中将页面的主文件转换为它的实际类型(SiteMaster here).否则我无法访问此属性.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读