4

すべてのプレビューリリースからのMVCに関するすべての情報と、1つの公式リリースとの間の混乱のため、viewusercontrolsの処理方法が非常に混乱しています。ですから、この例を実装する方法を教えてください。

私のウェブサイトのいくつかのページに表示する必要がある今後のイベントのリストがあります。したがって、Views \ Sharedフォルダー内に新しいViewUserControl(ListEvents.ascx)を配置しました。

このListEvents.ascxに、ホーム/インデックスビューで次のようにレンダリングするように要求しています。

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents");%>
</p>

モデルをこのviewusercontrolに渡すにはどうすればよいですか?私はこれができることを知っています:

<p>
    Here's a list of events:
    <% Html.RenderPartial("ListEvents", (new Model.Services.EventService(null)).ListEvents());%>
</p>

しかし、ビューの内側から新しいモデルを作成するのは、それほど賢明なことではないようです。それとも私はここで間違っていますか?私はvalidationstateを渡すことさえできないので、nullパラメーターです。したがって、別のオプションは、このデータをViewData []メンバーに格納することですが、私のviewusercontrolは、その親のViewDataに依存することは想定されていません。

これには非常に簡単な答えがあると確信しています。この問題についてWebを閲覧し終えたので、共有してください。

ありがとう!

簡単な答え:viewusercontrolは、それが存在するビューから常にそのモデルを受け取る必要があります。これを回避するには、コードビハインドファイルをviewusercontrolに追加するなど、MVCパターンを壊します。

4

1 に答える 1

2

デフォルトでは、ページと同じモデルが使用されます。の各インスタンスにモデルを提供する場合RenderPartial、状況はおそらくブログ アプリケーションで複数のエントリをレンダリングするようなものです。ページ モデルのコレクションから各モデルを取得し、次のようにユーザー コントロールに渡すことができます。

foreach (var post in Model.Entries) {
  Html.RenderPartial("PostTemplate", post);
}
于 2009-04-03T17:53:26.643 に答える