Извлеките все ваши пользовательские веб-элементы управления из общего базового класса и представьте эту функцию как открытый метод (или методы). Ваш базовый класс может быть производным от UserControl (как обычно .ascx), а ваши элементы управления, в свою очередь, - от него.
Тогда, даже если использование отражения кажется небольшой работой, вы делаете это только один раз. Если текстовые поля являются динамическими, и вы хотите избежать жесткого кодирования, это будет путь.
Итак, если вам нужно просто получить значение текстового поля по идентификатору от родителя, вы можете добавить что-то вроде следующего в ваш базовый класс:
public string GetTextboxValue(string id)
{
string textValue = string.Empty;
Control ctl = FindControl(id);
if (ctl.GetType() == typeof(TextBox))
textValue = ((TextBox)ctl).Text;
return textValue;
}
Я бы сказал пойти по этому пути против предыдущего предложения сделать TextBox общедоступным, поскольку вы действительно хотите только читать текстовое значение из родительского элемента, а не выставлять весь объект как доступ для чтения / записи.