Asp.net 在sharepoint母版页上查找控件

Asp.net 在sharepoint母版页上查找控件,asp.net,sharepoint,master-pages,Asp.net,Sharepoint,Master Pages,我正在尝试遍历sharepoint页面上的所有控件,出于测试目的,我只想输出控件ID 这是我正在使用的代码 公共共享子替换值3(ByVal CurrentPage作为页面,ByRef s作为StringBuilder) ”第页() -母版页 '-HtmlForm '-ContentPlaceHolder “-文本框等。 对于CurrentPage.Controls中的每个ctlMaster控件 如果ctlMaster的类型为母版页,则 HttpContext.Current.Response.O

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

这是我正在使用的代码

公共共享子替换值3(ByVal CurrentPage作为页面,ByRef s作为StringBuilder)

”第页()
-母版页
'-HtmlForm
'-ContentPlaceHolder
“-文本框等。
对于CurrentPage.Controls中的每个ctlMaster控件
如果ctlMaster的类型为母版页,则
HttpContext.Current.Response.Output.Write(“母版页
”) 对于ctlMaster.Controls中的每个ctlForm As控件 如果ctlForm的类型是HtmlForm,那么 HttpContext.Current.Response.Output.Write(“HTML表单
”) 对于每个ctlForm.Controls中的ctlContent As控件 如果ctlContent的类型为ContentPlaceHolder,则 HttpContext.Current.Response.Output.Write(“内容占位符
”) 对于ctlContent.Controls中的每个ctlChild As控件 HttpContext.Current.Response.Output.Write(ctlChild.ID.ToString&“
”) 下一个 如果结束 下一个 如果结束 下一个 如果结束 下一个 HttpContext.Current.Response.Output.Write(“----------------”) HttpContext.Current.Response.End()
然而,它并没有通过“母版页”输出


我希望在我的内容占位符中看到所有控件的名称,但我觉得这有点混乱。

母版页不是当前页面的控件,它是当前页面的属性,在页面中。母版页从page.Master.controls开始

从那以后,你所拥有的基本上都会起作用

        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
对于Page.Master.Controls中的每个ctlForm As控件,

如果ctlForm的类型是HtmlForm,那么
HttpContext.Current.Response.Output.Write(“HTML表单
”) 对于每个ctlForm.Controls中的ctlContent As控件 如果ctlContent的类型为ContentPlaceHolder,则 HttpContext.Current.Response.Output.Write(“内容占位符
”) 对于ctlContent.Controls中的每个ctlChild As控件 HttpContext.Current.Response.Output.Write(ctlChild.ID.ToString&“
”) 下一个 如果结束 下一个 如果结束 下一个
我发现这段代码似乎列出了我需要的控件,但我认为这更像是一种黑客行为

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
i=0到CurrentPage.Request.Form.AllKeys.Length的
1
如果CurrentPage.Request.Form.GetKey(i).包含(“ctl00$PlaceHolderMain$”),则
Dim key As String=CurrentPage.Request.Form.GetKey(i).子字符串(22)
Dim keyText作为String=String.Format(“[{0}]”,key)
HttpContext.Current.Response.Output.Write(keyText&“
”) 'Text.Replace(keyText,CurrentPage.Request.Form(“ctl00$PlaceHolderMain$”&key)) 如果结束 下一个
您可以简单地使用递归来实现这一点,而不是efficent,但它很简单。。。尝试以下方法: 公共控件(控件输入)


这将在页面上的所有控件之间循环,输出它们的type-ID,并将其打印到页面顶部。。。您还可以使用该代码来构建列表或任何您想做的事情。

为了澄清,这是从Web部件还是从SharePoint母版页中完成的?您如何调用SubstituteValues3?您为CurrentPage参数指定了什么值?如回答中所述,您的代码可能永远不会工作,因为母版页不是该页的子控件。
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
{
    foreach (Control c in input.Controls)
    {
        Response.Write(c.GetType().ToString() + " - " + c.ID + "<br />");
        getControls(c);
    }
}
getControls(Page);