0

すべてのパーシャルとビューに「グローバル」メンバー (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 }); %>

先に進む前に、これを実装する他の方法があるかどうか疑問に思っています。

助言がありますか?

ありがとう!

4

1 に答える 1

0

これらのものをセッションに保持し、この情報にアクセスできるセッションの周りに厳密に型指定されたラッパーを作成することを検討しましたか? 次に、任意のビューで、ViewPage (または ViewUserControl) の Session プロパティを使用して新しいラッパー クラスを作成し、それを使用するだけです。

于 2009-06-24T13:27:07.443 に答える