2011-12-08 3 views
0

私は現在MVC3チュートリアルを行っています。 IEnumerableへのバインドは次のように行われます。MVC3のforeachループはUIを出力する唯一の方法を表示します

@ModelType IEnumerable(Of Product) 

@foreach (var p in Model) { 
    <div class="item"> 
     <h3>@p.Name</h3> 
     @p.Description 
     <h4>@p.Price.ToString("c")</h4> 
    </div> 
} 

これは唯一の方法ですか?これは、古典的なASPのやり方を彷彿させます。

コードシャドーが王様であるWebFormsから移行するのは難しいことではありません。

誰かが私の恐怖を抱きしめてください。

+0

これは間違いなく、何らかのループがなければ、モデルに含まれる多くのアイテムをどのように出力しますか? DisplayTemplateを使用することもできますが、すべての要素を出力するにはループが必要です。 –

答えて

2

コードがあるので、それだけのことです。 データバインディングはWebフォームで何をしましたか?それは、あなたのプレゼンテーション層で通常は黒い魔法で働いていて、XMLマークアップに書かれているさまざまなメソッドに戻ってくる、「魔法のような」コードの背後にあるコードを設定しました。あなたは何が何をしているのかを追跡することができませんでした。あなたはオブジェクトのeをeventargsとして渡しました。それは面倒です。

上記のコードは正常です。 Theresはコードの背後にコールバックする必要はなく、将来のブラウザで何かを修正するために新しいバージョンのコントロールを待つ必要はありません。

ASPは、プレゼンテーション層にBUSINESS LOGICを混在させました。上記のコードはプレゼンテーションレイヤーなので、コードは問題ありません。

WebGridまたはTelerikのグリッド(またはMVCContrib)を使用すると、より適切な表示やより多くの「バインディングのような」アイテムを作成できます。また、このビューをカスタマイズするためにDisplayTemplatesを使用すると、Html.DisplayFor()上記のコードを繰り返す必要はありません。

1

私はそれが唯一の方法であるとは確信していません。あなたが主張していれば、あなたは本当にしたい場合は、HTMLヘルパーを作成し、コードの中にそれを行うことができます。しかし、StringBuilderやHTMLを書くための他の総体的な仕組みを使用しています。

MVCのRepeaterに相当するASP.NETを作成するには、forループを作成します。特にRazr構文を使用すると、はるかに簡単で柔軟性があります。

1

Html.DisplayForModelのオーバーロードを使用すると、IEnumerable(Of Product)の表示に使用するテンプレートの名前も使用できます。あなたのビューが

@Html.DisplayForModel("ItemList") 

のように読んでいましたその方法があり、この手順hereための一例です。しかし、はで、列挙可能シーケンスの表示形式をカスタマイズしたいので、ある時点(この場合は "ItemList"表示テンプレート内)でが上記のようなコードを書く必要があります。

関連する問題