Как динамически установить текстовое свойство для любого типа веб-элементов управления с веб-страницы

Мне нужно динамически установить текстовое свойство для элементов управления любого типа (например, текстовое поле, метка, гиперссылка и т. д.) с моей веб-страницы. Вот мой код

foreach (string id in List<IdCollection>)
{
Control ctrl = (this.Page.FindControl(id)); // Control should be HtmlGenericControl or WebControl.
ctrl.Text=???(This property is not available for Control Class)..
}

Мне не нужно проверять каждый тип элемента управления для заданного текстового свойства, например, следующие коды

if(ctrl is TextBox)
{
((TextBox)ctrl).Text="test";
}

or

 if(ctrl.GetType()==typeof(TextBox))
{
 ((TextBox)ctrl).Text="test";
}

Есть ли другой способ установить текстовое свойство как простое, как в следующем коде

WebControl wbCntrl=(WebControl)ctrl;
wbCntrl.Tooltip="tooltip"; //// This is possible
wbCntrl.Text="test" ??? //// But this is not possible

Спасибо


person Suresh    schedule 11.01.2013    source источник


Ответы (1)


Если вы используете С# 4.0 (VS 2010), вы можете использовать ключевое слово "динамический":

foreach (string id in List<IdCollection>)
{
  dynamic ctrl = (this.Page.FindControl(id)); 
  ctrl.Text = "test";
}

Очевидно, вы получите исключение времени выполнения, если попытаетесь сделать это с элементом управления, в котором отсутствует свойство Text.

person Thomas Krantz    schedule 11.01.2013
comment
Спасибо, Томас. Но я использую С# 3.5. Таким образом, «динамический» не поддерживает свойство Text. - person Suresh; 12.01.2013