最近、多くのデータソースで処理する必要がある複雑なビューの設計を開始すると、プロジェクトで醜い問題に直面しました。このビューの目的は、顧客のプロファイルに関連するデータを表示することですが、基本情報、関連するプロジェクト、財務データ、連絡先情報など、このプロファイルを作成したものです。これらのデータはすべて同じビューでグループ化され、更新可能でなければなりません。これに加えて、ビューの右ペインには、顧客情報に関係のない他のソースを指すウィジェットのいくつかがあります。 これを解決するための私のアプローチがあった。personalInfoModel
、cutomerProjectModel
、financialInfoModel
、およびcontactInfoModel
:MVC 3のコンポジションビューのデザイン
- が、それはのような様々なモデルの混合だハイブリッドモデルを作成します。ところで、私はMicrosoftのエンティティフレームワークを使用していますので、ここではすべてのモデルがエンティティと1対1で対応しています。このハイブリッドモデルで
、私がメインビューへの接続を行う(のはCustomerViewを言わせて)ので、ビューコードの1行目に次のようなものを参照することができます:私は、メインビュー内
<%@ Page ..... Inherits="...MyProject.Models.hybridCustomerModel"
を
<% Html.RenderPartial("UC_BasicInfo"); %> <% Html.RenderPartial("UC_ProjectInfo"); %> <% Html.RenderPartial("UC_FinancialInfo"); %> <% Html.RenderPartial("UC_ContactInfo"); %>
これは、メインビューをレンダリングするためのユーザーコントロールを使って少し簡単にしたいからです。
すべてのユーザーコントロール(¨* .ascx)は、ハイブリッドモデルを指しているので、問題のないフォームのコントロールでバインディングを行うことができます。
コントローラーでは、少し不規則に見えます。すべての* .ascxには、 "post request"を処理するアクションのメソッドがあります。しかし、最初のロードまたはGet要求は、View Name:CustomerViewと一致する唯一のアクションメソッド内で行われます。 ユーザビリティと応答性のために、私はjqueryを使用して投稿要求を行います。 しかし、データレイヤーはモデルによって作成されたすべてのエンティティでマップされるモデルのみを受け取るため、Post Requestに含まれるプレーンモデルでハイブリッドモデルをマッピングする作業が必要です。
最後に、使用しているハイブリッドモデルからデータを取得するために、ビューの右ペインにあるウィジェットの
<% Html.RenderAction() %>
を使用しています。
この場合、いくつかの異なる方法がありますか?