私はサードパーティのシステムを使用して、Web サイトにいくつかのフォームを実装しています。
サードパーティのシステムは、これらのフォームの 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 モンキー) がヘルプ テキストを変更し、ID によってフィールドに関連付けることができるようにしたいと考えています。みたいなこと
<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 レベル下にあるこれらの子コントロールに取得する「最良の」方法は何ですか。
ページには、これらのフォームの 1 つだけが存在します。トップレベルのフォームをシングルトンにして、そのようにする必要がありますか...?
if(MyCrazyForm.Instance.HelpTexts.ContainsKey("theIdOfTheCurrentField"))
{
this.HelpText = MyCrazyForm.Instance.HelpTexts["theIdOfTheCurrentField"];
}
フォームへの参照をツリーの下のすべてのコントロールに渡す必要がありますか (これは面倒です)。
私はこのアーキテクチャ (現時点ではうまく機能していますが) の私のアーキテクチャで何マイルも目標を達成していますか?別の実装方法を検討する必要がありますか?
ありがとう