【问题标题】:Determine ClientID of ContentPlaceHolder in current context when adding dynamic controls添加动态控件时确定当前上下文中ContentPlaceHolder的ClientID
【发布时间】:2011-07-11 15:54:03
【问题描述】:

我正在动态创建一个表格控件,其中包含表格每一行的一系列标签和下拉菜单,其中还包括标签和下拉菜单上的一些 javascript。

    Dim dd As New DropDownList
    Dim ds As System.Data.DataTable = GetTable("EmployeePosition")
    Dim prefix As String = "Position"
    dd.ID = prefix & i
    dd.DataSource = ds
    dd.DataValueField = "PositionID"
    dd.DataTextField = "PositionName"
    dd.Attributes.Add("onchange", "checkDuplication(this,'" & prefix & "');")
    dd.DataBind()

javascript 函数“onchange”遍历所有以前缀开头的下拉控件,并检查任何下拉列表的值是否相同。

然后将该表添加到 PlaceHolder 控件中,该控件又包含在我的母版页上的 ContentPlaceHolder 控件中。

    Master_Content1_Position1

我再次遇到的问题是当放置在母版页和 ContentPlaceHolders 上时控件的自动命名,尤其是涉及 javascript 时。

到目前为止,我想出的最佳解决方案是找到包含 PlaceHolder 的 ContentPlaceHolder,检索 ClientID 并将该值传递给表创建者。

        Dim cph As ContentPlaceHolder = Me.Master.FindControl("Content1")
        Dim tbl As Table = New PositionTable(cph.ClientID).ToTable
        PlaceHolder1.Controls.Add(tbl)

有没有办法确定控件或 PlaceHolder 的当前 ContentPlaceHolder 所在的位置,并返回 ClientID 或 UniqueID,以便我可以将此值传递给我的表创建者,以便为 javascript 函数添加前缀,以使用元素标识?最好使用将作为基值填充的 PlaceHolder 或 Control?

谢谢。

【问题讨论】:

    标签: asp.net controls placeholder master contentplaceholder


    【解决方案1】:

    您可以使用 Control 类的Parent 属性。如果您的控件是它的第一级子控件,那将返回 ContentPlaceHolder 控件。如果不是,那么您可以使用 Parent of Parent(等等)并检查它是否是 ConterPlaceHolder:

    private ContentPlaceHolder GetParentContentPlaceHolder()
    {
        Control nextParent = this.Parent;
        while (nextParent != null)
        {
            ContentPlaceHolder parentContentPlaceHolder = nextParent as ContentPlaceHolder;
            if (parentContentPlaceHolder != null)
            {
                return parentContentPlaceHolder;
            }
    
            nextParent = nextParent.Parent;
        }
    
        return null;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-28
      相关资源
      最近更新 更多