我正在尝试遍历sharepoint页面上的所有控件,出于测试目的,我只想输出控件ID
这是我正在使用的代码
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()
然而,它没有超过'MasterPage'输出。
我希望看到我的内容占位符中所有控件的名称,但我发现它有点令人困惑。
答案 0 :(得分:1)
从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
答案 1 :(得分:0)
MasterPage不是当前页面的控件,它是 Page.MasterPage
中的属性答案 2 :(得分:0)
我发现这段代码似乎列出了我需要的控件,但我认为它更像是一个黑客。
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
答案 3 :(得分:0)
你可以简单地使用递归,而不是高效,但它很简单...尝试这种方法: public void getControls(控制输入)
{
foreach (Control c in input.Controls)
{
Response.Write(c.GetType().ToString() + " - " + c.ID + "<br />");
getControls(c);
}
}
并称之为:
getControls(Page);
这将循环显示您网页上的所有控件并输出它们的类型 - ID 并将其打印到页面顶部...您还可以使用该代码构建一个列表或者你想做什么。