在sharepoint母版页上查找控件

时间:2022-08-11 15:55:48

I'm trying to loop through all the controls on a sharepoint page, for the purposes of testing i just want to output the control ID

我正在尝试遍历sharepoint页面上的所有控件,为了测试的目的,我只想输出控件ID

this is the code i'm using

这是我正在使用的代码

Public Shared Sub SubstituteValues3(ByVal CurrentPage As Page, ByRef s As StringBuilder)

Public Shared Sub SubstituteValues3(ByVal CurrentPage As Page,ByRef s As StringBuilder)

    'Page()
    '- MasterPage
    '- HtmlForm
    '- ContentPlaceHolder
    '- The TextBoxes, etc.

    For Each ctlMaster As Control In CurrentPage.Controls


        If TypeOf ctlMaster Is MasterPage Then
            HttpContext.Current.Response.Output.Write("Master Page <br/>")

            For Each ctlForm As Control In ctlMaster.Controls

                If TypeOf ctlForm Is HtmlForm Then
                    HttpContext.Current.Response.Output.Write("HTML Form <br/>")

                    For Each ctlContent As Control In ctlForm.Controls
                        If TypeOf ctlContent Is ContentPlaceHolder Then
                            HttpContext.Current.Response.Output.Write("Content Placeholder <br/>")

                            For Each ctlChild As Control In ctlContent.Controls
                                HttpContext.Current.Response.Output.Write(ctlChild.ID.ToString & "<br />")
                            Next
                        End If
                    Next
                End If
            Next
        End If
    Next

    HttpContext.Current.Response.Output.Write("--------------")
    HttpContext.Current.Response.End()

however it's not getting past the 'MasterPage' output.

但它没有超过'MasterPage'输出。

I would expect to see the names of all the controls i have inside my content placeholder but i find it all a bit confusing.

我希望看到我的内容占位符中的所有控件的名称,但我发现它有点令人困惑。

4 个解决方案

#1


1  

Start with Page.Master.Controls

从Page.Master.Controls开始

From there what you have should basically work

从那里你应该基本上工作

        For Each ctlForm As Control In Page.Master.Controls

            If TypeOf ctlForm Is HtmlForm Then
                HttpContext.Current.Response.Output.Write("HTML Form <br/>")

                For Each ctlContent As Control In ctlForm.Controls
                    If TypeOf ctlContent Is ContentPlaceHolder Then
                        HttpContext.Current.Response.Output.Write("Content Placeholder <br/>")

                        For Each ctlChild As Control In ctlContent.Controls
                            HttpContext.Current.Response.Output.Write(ctlChild.ID.ToString & "<br />")
                        Next
                    End If
                Next
            End If
        Next

#2


0  

A MasterPage isn't a control of the current page, it's a property of it, in Page.MasterPage

MasterPage不是当前页面的控件,它是Page.MasterPage中的属性

#3


0  

i found this piece of code which seems list the controls I need, i think it's more of a hack though.

我发现这段代码似乎列出了我需要的控件,我认为它更像是一个黑客。

For i = 0 To CurrentPage.Request.Form.AllKeys.Length - 1
        If CurrentPage.Request.Form.GetKey(i).Contains("ctl00$PlaceHolderMain$") Then


            Dim key As String = CurrentPage.Request.Form.GetKey(i).Substring(22)
            Dim keyText As String = String.Format("[{0}]", key)

            HttpContext.Current.Response.Output.Write(keyText & "<br/>")

            'Text.Replace(keyText, CurrentPage.Request.Form("ctl00$PlaceHolderMain$" & key))
        End If
    Next

#4


0  

you can do this simply with recursion, not efficent, but it is simple... try this method: public void getControls(Control input)

你可以简单地使用递归,而不是高效,但它很简单...尝试这种方法:public void getControls(Control input)

{
    foreach (Control c in input.Controls)
    {
        Response.Write(c.GetType().ToString() + " - " + c.ID + "<br />");
        getControls(c);
    }
}

And call it like this:

并称之为:

getControls(Page);

That will cycle trough all controls on your page and output the type - ID of them and print it out to the top of the page... you could also use the code to construct a list or whatever you want to do.

这将循环通过页面上的所有控件并输出类型 - 它们的ID并将其打印到页面顶部...您还可以使用代码构建列表或任何您想要执行的操作。

#1


1  

Start with Page.Master.Controls

从Page.Master.Controls开始

From there what you have should basically work

从那里你应该基本上工作

        For Each ctlForm As Control In Page.Master.Controls

            If TypeOf ctlForm Is HtmlForm Then
                HttpContext.Current.Response.Output.Write("HTML Form <br/>")

                For Each ctlContent As Control In ctlForm.Controls
                    If TypeOf ctlContent Is ContentPlaceHolder Then
                        HttpContext.Current.Response.Output.Write("Content Placeholder <br/>")

                        For Each ctlChild As Control In ctlContent.Controls
                            HttpContext.Current.Response.Output.Write(ctlChild.ID.ToString & "<br />")
                        Next
                    End If
                Next
            End If
        Next

#2


0  

A MasterPage isn't a control of the current page, it's a property of it, in Page.MasterPage

MasterPage不是当前页面的控件,它是Page.MasterPage中的属性

#3


0  

i found this piece of code which seems list the controls I need, i think it's more of a hack though.

我发现这段代码似乎列出了我需要的控件,我认为它更像是一个黑客。

For i = 0 To CurrentPage.Request.Form.AllKeys.Length - 1
        If CurrentPage.Request.Form.GetKey(i).Contains("ctl00$PlaceHolderMain$") Then


            Dim key As String = CurrentPage.Request.Form.GetKey(i).Substring(22)
            Dim keyText As String = String.Format("[{0}]", key)

            HttpContext.Current.Response.Output.Write(keyText & "<br/>")

            'Text.Replace(keyText, CurrentPage.Request.Form("ctl00$PlaceHolderMain$" & key))
        End If
    Next

#4


0  

you can do this simply with recursion, not efficent, but it is simple... try this method: public void getControls(Control input)

你可以简单地使用递归,而不是高效,但它很简单...尝试这种方法:public void getControls(Control input)

{
    foreach (Control c in input.Controls)
    {
        Response.Write(c.GetType().ToString() + " - " + c.ID + "<br />");
        getControls(c);
    }
}

And call it like this:

并称之为:

getControls(Page);

That will cycle trough all controls on your page and output the type - ID of them and print it out to the top of the page... you could also use the code to construct a list or whatever you want to do.

这将循环通过页面上的所有控件并输出类型 - 它们的ID并将其打印到页面顶部...您还可以使用代码构建列表或任何您想要执行的操作。