すべてのパーシャルとビューに「グローバル」メンバー (CurrentUser、Theme など) を含める良い方法を見つけようとしています。
このデータを返すことができるロジック クラス (BL.CurrentUser など) は必要ありません。ビューのモデルの一部である必要があると思います。そのため、これらのメンバーを使用して BaseViewData から継承してみました。私のコントローラーでは、この方法または別の方法 (BaseController のフィルターまたは基本メソッド) で、継承クラスのインスタンスを作成し、それをビュー データとして渡します。この時点まではすべて完璧です。なぜなら、ビュー データをメイン ビューでベース メンバーと一緒に使用できるからです。しかし、パーシャルはどうですか?
ブログ投稿を表示する必要がある単純なパーシャルがある場合、次のようになります。
<%@ Control Language="C#" AutoEventWireup="true" Inherits="ViewUserControl<Post>" %>
私のビューでこのパーシャルをレンダリングする簡単なコード (その model.Posts は ですIEnumerable<Post>
):
<%foreach (Post p in this.Model.Posts) {%>
<%Html.RenderPartial("Post",p); %>
<%}%>
パーシャルのモデルは BaseViewData ではないため、これらのプロパティにアクセスできません。したがって、BaseViewData から継承する PostViewData という名前のクラスを作成しようとしましたが、含まれているビューには、PostViewData を実際に作成してパーシャルに渡すコードがあります。
<%Html.RenderPartial("Post",new PostViewData { Post=p,CurrentUser=Model.CurrentUser,... }); %>
または、コピーコンストラクターを使用できます
<%Html.RenderPartial("Post",new PostViewData(Model) { Post=p }); %>
先に進む前に、これを実装する他の方法があるかどうか疑問に思っています。
助言がありますか?
ありがとう!