2013-10-14 4 views
2

Я пытаюсь написать общую функцию, которая проверяет все элементы управления формами внутри данного родителя, чтобы я мог повторно заполнить значения формы позднее.Как найти элемент управления ClientID в C# .net?

хранить каждый элемент управление ID и VALUE в печенье, и я заселить элементы управления с помощью FindControl(ID) чтобы найти элемент управления перед установкой его значения.

Все работает нормально, за исключением случаев, когда у меня есть несколько экземпляров usercontrol, внутри которых есть дочерние элементы управления.

Например, управление DateRange определяет два ... текстовые поля

<asp:TextBox ID="txtDateFrom" /> 
<asp:TextBox ID="txtDateTo" /> 

Тогда в моей форме, если у меня есть два DateRange управления ...

<my:daterange id="DateRangeA" /> 
<my:daterange id="DateRangeB" /> 

... теперь у меня есть текстовые поля, идентификаторы которых равны txtDateFrom (и 2x txtDateTo), таким образом, я не могу либо сохранить оба значения в файле cookie (поскольку их идентификаторы не уникальны), либо снова восстановить элементы управления с помощью FindControl().

Что бы я хотел, это нечто похожее на FindControl(ID), но вместо этого используйте CLIENTID, чтобы я мог различать дочерние элементы управления с тем же идентификатором внутри разных пользовательских элементов управления.

Я не согласен с тем, что нужно вручную сохранить полный путь ко всем элементам управления (каким-то образом), а затем использовать FindControl(IDa).FindControl(IDb).FindControl(IDc)... (или что-то еще) для перехода к дочерним элементам управления.

Должен быть более простой способ, не так ли?

Или я подхожу к этому все неправильно? Совет оценил, спасибо.

ответ

2

Сделайте свой контроль реализации INamingContainer interface

Согласно статье:

Любой элемент управления, который реализует этот интерфейс, создает новое пространство имен в , которые все атрибуты дочернего элемента управления ID гарантированно быть уникальным в целое приложение.

Кроме того, отметьте это article.

+0

Хм. Хорошо, поэтому я попробовал это, и хотя идентификаторы, переданные в HTML-элементы, теперь действительно уникальны, идентификатор, доступный для кода, не изменился. Спасибо за ваш совет. Тем временем я выбрал (хакерский) обходной путь и сохранил КАЖДЫЙ контроль с помощью «PARENTID +»> «+ ID», нужен он ему или нет. Таким образом, достаточно для того, чтобы последовательно находить какой-либо элемент управления, который я могу использовать: 'FindControl (PARENTID) .FindControl (ID)' – Bumpy

 Смежные вопросы

  • Нет связанных вопросов^_^