2012-02-27 6 views

答えて

3

ような何かを、ページの後半であるが存在しますViewBag/ViewDataについて考えるべきではありません。

@foreach (viewModel vm in Model.SomeSubModels) 
{ 
    //some foo bar 
} 

またはより良い、あなたの意見で恐ろしいforeachループを避けるために:あなたは強くビューモデルにビューを入力したら、あなたがこのビューにしなければならないすべては、そうのように、このビューモデルのプロパティを使用しています(あなたには、いくつかのプロパティを編集する必要がある場合)、エディタのテンプレートを使用して使用することができます

@Html.EditorFor(x => x.SomeSubModels) 

または表示テンプレート(あなただけのユーザーにあなたのビューモデルのプロパティの値を表示する場合)を使用して:

@Html.DisplayFor(x => x.SomeSubModels) 

だからここのは(そのために)ASP.NET MVCアプリケーションを設計する際に従うべき基本的なルールのカップルです:

  1. あなたはViewBag/ViewDataを忘れます。あたかも彼らが存在しなかったかのようです。あなたは単にそれらを拭き取るだけです。あなたがそれらを忘れてしまったら、あなたは本当の奉仕をします。
  2. ビューに必要なすべてのプロパティを含むクラスであるビューモデルを定義します。
  3. コントローラーアクションでリポジトリーとドメインモデルを照会し、ビューに渡されるこのビューモデルに結果をマップします。
  4. 対応するビューでは、コントローラアクションが提供したビューモデルのプロパティを使用して、一部の情報を表示するだけです。

ルール番号1.は本当の基本であり、最も重要なものです。このルールを尊重しないと、実際にASP.NET MVCを正しく実行していません。

+0

私はアイテムをリストし、アイテム作成を可能にするビューを持っています。ユーザーがアイテムを作成したいときに、リスト全体をポストバックしたくないのです。この場合、厳密に型指定されたビューモデルを使用しないことを選択しました。なぜなら、リスト全体を再ポストする必要がないからです1つのアイテムを追加します。 –

+0

@ TravisJ、ASP.NET MVCで厳密に型指定されたビューモデルを使用しないようにするシナリオはまったくなく、ViewBag/ViewCrapをオプトインする必要があります。ビューモデルは、行く方法です。彼らはあなたが持っているすべての問題を解決します。プロジェクトに新しいクラスを追加することを恐れないでください。 –

+0

'[httppost]'で装飾されたコントローラがviewmodelを受け入れ、viewmodelがフルリストでビューに渡された場合、そのリストも投稿されませんか? –