Я работаю со сторонней системой для реализации некоторых форм на веб-сайте.
Сторонняя система предоставляет мне 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 уровня глубже в дереве элементов управления.
На странице всегда будет только одна такая форма. Должен ли я сделать форму верхнего уровня как Singleton и получить ее так...?
if(MyCrazyForm.Instance.HelpTexts.ContainsKey("theIdOfTheCurrentField"))
{
this.HelpText = MyCrazyForm.Instance.HelpTexts["theIdOfTheCurrentField"];
}
Должен ли я передавать ссылку на форму в каждый элемент управления по всему дереву (это кажется беспорядочным)?
Я далеко от цели с моей архитектурой этой формы (хотя на данный момент она работает очень хорошо) и должен ли я рассмотреть другой метод реализации?
Спасибо