アーキテクチャの詳細と、それをどのように解決したかを明確にするため。次のプロジェクト/アセンブリがあります。
- ビジネス オブジェクト
- VB XML De/Serialization ライブラリ
- ASP.NET MVC プロジェクト
VB XML アセンブリは、ビジネス (#1) モデルのみを扱うビジネス オブジェクトのシリアル化を処理します。したがって、次のような XElement を出力します。
<invoice>
<invoiceId>1234</invoiceId>
<customer>Hudsucker Industries</customer>
<otherBusinessData>etc, etc</otherBusinessData>
</invoice>
jqGridを使用していて、特定のアクションに各請求書に要素を追加する必要があるという問題が発生するため、次のようなものが必要です。
<invoice>
<actionHtml><![CDATA[ ...some HTML such as links... ]]></actionHtml>
<invoiceId>1234</invoiceId>
<customer>Hudsucker Industries</customer>
<otherBusinessData>etc, etc</otherBusinessData>
</invoice>
私はそれを機能させましたが、コントローラーですべての actionHtml を生成する必要がありましたが、これは明らかに懸念事項の適切な分離ではなく、すべての HtmlHelper メソッドなどを失いました。それで、私がそれを「正しい」方法で解決した方法は次のとおりです。
- WebForms ビューを使用する (私は自分のページに brail ビューを使用しています) [そのため、ContentType ページ属性を使用して XML に設定できます]。
- 生のビジネス オブジェクトのコレクションをモデル データとして渡します。
- モデル コレクションをループし、ビュー内の請求書ごとに actonHtml 要素を作成します (したがって、HtmlHelper メソッドなどを取得します)。
- 実際のビジネス要素を出力するには、VB XML ライブラリを呼び出して a:
invoice.ToXml().Elements().ToString()
を実行するだけです。
これをさらに再利用可能にするために、コンテンツ領域にすべてのレコード数などを含む jqGrid マスター ページを作成しました。これにより、その情報を実際のページに渡すだけで、要素データの出力について心配することができます。