Я пытаюсь перебрать все элементы управления на странице sharepoint, в целях тестирования я просто хочу вывести идентификатор элемента управления
это код, который я использую
Общедоступная общая подстановка SubstituteValues3 (ByVal CurrentPage как страница, ByRef как 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".
Я ожидал увидеть имена всех элементов управления, которые у меня есть в моем заполнителе контента, но я нахожу все это немного запутанным.
Как вы называете SubstituteValues3? Какое значение вы даете параметру CurrentPage? Как упоминалось в ответах, ваш код может никогда не работать, поскольку главная страница не является дочерним элементом управления этой страницы.





MasterPage - это не элемент управления текущей страницы, это ее свойство в Page.MasterPage
Начните с 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
Я нашел этот фрагмент кода, который, кажется, перечисляет элементы управления, которые мне нужны, хотя я думаю, что это больше похоже на взлом.
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
вы можете сделать это просто с помощью рекурсии, неэффективно, но это просто ... попробуйте этот метод: public void getControls (ввод управления)
{
foreach (Control c in input.Controls)
{
Response.Write(c.GetType().ToString() + " - " + c.ID + "<br />");
getControls(c);
}
}
И назовите это так:
getControls(Page);
Это будет циклически проходить через все элементы управления на вашей странице и выводить из них тип - ID и распечатывать его в верхней части страницы ... вы также можете использовать код для создания списка или того, что вы хотите сделать.
Чтобы уточнить, выполняется ли это из веб-части или из главной страницы SharePoint?