Кто-либо знает о способе считать в списке весь Клиентский идентификатор UpdatePanel, который я имею на странице? В основном я должен циклично выполниться посредством всех средств управления на странице с типом UpdatePanel и отобразить ClientID для каждого..
У меня есть четыре панели обновления на этой странице, и я использую это
private string LoopUpdatePanel(ControlCollection controlCollection)
{
StringBuilder sb = new StringBuilder();
foreach (Control control in controlCollection)
{
if (control is UpdatePanel)
{
sb.Append(((UpdatePanel)control).ClientID + ", ");
}
if (control.Controls != null)
{
LoopUpdatePanel(control.Controls);
}
}
return sb.ToString();
}
Это возвращает пустую строку??
Не уверен, какой язык вы используете или что вы пробовали... Пожалуйста, дайте нам код, чтобы мы знали, что вы пробовали, возможно, мы поймаем ошибку.
но в качестве примера вот как вы будете перебирать элементы управления. Просто используйте нужные вам свойства вместо текста (в вашем случае Id value и update panels). Я считаю, что важной частью приобретения элементов управления является прохождение через всю иерархию элементов управления, чтобы не пропустить дочерние, внучатые и т.д. элементы.
private void Page_Load(object sender, System.EventArgs e)
{
LoopTextboxes(Page.Controls);
}
private void LoopTextboxes(ControlCollection controlCollection)
{
foreach(Control control in controlCollection)
{
if(control is TextBox)
{
((TextBox)control).Text = "I am a textbox";
}
if(control.Controls != null)
{
LoopTextboxes(control.Controls);
}
}
}
Похоже на правильную логику, возможно, вы перебираете другой набор элементов управления?
Пробовали ли вы пройтись с помощью отладки и проверить идентификаторы?
protected void Page_Load(object sender, EventArgs e)
{
try
{
string result = "result = ";
foreach (Control tmpControl in Page.Controls)
{
Type tmpType = tmpControl.GetType();
if (tmpControl is SiteMaster)
{
foreach (Control SiteMasterControlItem in tmpControl.Controls)
{
if (SiteMasterControlItem is System.Web.UI.HtmlControls.HtmlForm)
{
int i = 0;
for( i =0;i < SiteMasterControlItem.Controls.Count; i++)
{
Type tmpType2 = SiteMasterControlItem.Controls[i].GetType();
}
}
}
}
}
Response.Write(result);
}
catch(Exception ex)
{
Response.Write("error = " + ex.StackTrace);
}
}
Последний цикл содержит держатель contentplace. Возможно, вам придется углубиться. Это было опробовано на VS2010 с c#4.0
HTH
Я думаю, это элемент управления, который содержит содержимое главной страницы Может быть новым для c # 4.0 Просто игнорируйте это и используйте внутренний цикл. Просто просмотрите все элементы управления, которые у вас есть на данный момент, и распечатайте все это.
Также метод, который вы создали, не возвращает значения правильно, вы вызываете метод без возвращаемых значений, а не сигнатуру, но когда вы вызываете такой метод, как LoopUpdatePanel (control.Controls);