Я использую следующий метод для рекурсивного поиска элемента управления на странице asp.net:
/// <summary>
/// Searches recursively for a server control with the specified id parameter.
/// </summary>
/// <param name="start">The start.</param>
/// <param name="id">The id.</param>
/// <returns>A <see cref="Control"/></returns>
public static Control FindControl(Control start, string id)
{
Control foundControl;
if (start == null)
return null;
foundControl = start.FindControl(id);
if (foundControl != null)
return foundControl;
foreach (Control c in start.Controls)
{
foundControl = FindControl(c, id);
if (foundControl != null)
return foundControl;
}
return null;
}
Я столкнулся с проблемой, потому что она возвращала неправильный контроль. Я отследил проблему до стандартного метода FindControl и исправил ее, проверив, что идентификатор возвращаемого элемента управления действительно соответствует запрошенному так:
foundControl = start.FindControl(id);
if (foundControl != null && foundControl.ID == id)
return foundControl;
Мой вопрос: почему start.FindControl (id) когда-либо возвращает элемент управления, который не соответствует запрошенному идентификатору?