Я работаю со сторонней системой для реализации некоторых форм на веб-сайте.
Сторонняя система предоставляет мне определения XML для этих форм.
например,
<form>
<segment>
<label>The header</label>
<fields>
...
<field>
<id>field_Dob</id>
<type>Date</type>
<label>Date of Birth</label>
<required>1</required>
</field>
...
</fields>
</segment>
...
</form>
Я анализирую этот XML в элементе управления сервером и программно генерирую дерево элементов управления. Метки элементов управления передаются в XML.
Это часть нашего предложения «вставить» небольшие тексты помощи в эту форму.
В идеале я хотел бы передать эти тексты справки из разметки элемента управления верхнего уровня, чтобы не разработчики (монки HTML) могли изменять тексты справки и связывать их с полем по его идентификатору. Примерно так
<controls:MyCrazyForm runat="server">
<helpTexts>
<helpText for="field_Dob">
Some rambling nonsense to do with the DOB field
</helpText>
...
</helpTexts>
</controls:MyCrazyForm>
Элементы управления анализируются рекурсивно.
Форма создает набор полей для каждого сегмента, наборы полей создают множество FieldXXX (где XXX = дата, текст, поле со списком и т. Д.) В зависимости от типа данных.
Типы FieldXXX создают div, а затем несколько стандартных элементов управления .net (TextBox, DropDownList и т. Д.), Которые фактически отображают сами себя. Именно в этот момент внутри содержащего div мне нужно вывести текст справки.
Мой вопрос
Каков "лучший" способ получить эти тексты из элемента управления формы верхнего уровня в эти дочерние элементы управления, которые находятся на 3 или 4 уровня глубже в дереве элементов управления.
На странице будет только одна из этих форм.
Должен ли я сделать форму верхнего уровня как синглтон и получить ее так ...?
if(MyCrazyForm.Instance.HelpTexts.ContainsKey("theIdOfTheCurrentField"))
{
this.HelpText = MyCrazyForm.Instance.HelpTexts["theIdOfTheCurrentField"];
}
Должен ли я передавать ссылку на форму в каждый элемент управления вплоть до дерева (это кажется грязным)?
Являюсь ли я мишенью цели с моей архитектурой этой (хотя сейчас она работает очень хорошо) формы, и мне следует взглянуть на другой способ реализации?
Спасибо