2011-12-28 6 views
2

ループを使用せずにIEnumerableタイプのRazorビューでModelプロパティ(Like @Html.EditorFor(x=>Model.Name)など)にアクセスする方法LISTとしてモデルを保持しているモデルに対して、ビューが強く型付けされている場合。
など。その後
IEnumerableタイプのレイザービューでモデルプロパティにアクセスするには?

@model IEnumerable<EFTest2.DAL.package_master> 


(新しいモデルを作成する)TestBoxForまたはEditorForを表示することが可能であるHTMLヘルパーのforeachループを使用しない。???

+0

それでも、すべてのコレクションを繰り返し処理しなければならないので、「リスト」と呼ばれます。 – IamStalker

+0

あなたは多くの場所で使用している場合にのみHTMLを吐き出す独自の拡張メソッド(HTML用)を書くことができます – Anand

答えて

2

一部のモデルプロパティがIEnumerable<SomeType>の場合、通常はエディタ/ディスプレイテンプレート(~/Views/Shared/EditorTemplates/SomeType.cshtmlまたは~/Views/Shared/DisplayTemplates/SomeType.cshtml)を定義します。あなたはループを記述する必要はありませんように、このテンプレートは、自動的に、コレクションの各要素に対してレンダリングされます:

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

、あなたは個々のプロパティにアクセスすることができますテンプレート内部:

@model SomeType 
@Html.EditorFor(x => x.Name) 
... 

今度は、厳密に型付きのビュー内の要素に直接アクセスする必要がある場合は、IList<SomeType>またはSomeType[]などの他のコレクション型をビューモデルとして使用して、インデックスに直接アクセスできるようにしてください。これを行うことができます例えば6番目のエレメンツにアクセスするコレクションのNT:

@model IList<SomeType> 
@Html.EditorFor(x => x[5].Name) 
0

だから、基本的にあなたがタイプ一覧などの言及されている

フォームフィールドから、ユーザからの入力を受け付けるリストに値を追加し、既存のリストの中に追加したい場合モデル。あなたのモデルに「Person」と「List」を持っているとします。

空の人のインスタンスを持つ人のインスタンスを作成し、それをリストに追加し、この最後のリストアイテムを編集のためにバインドします。

@{ 
    Person contact = new Person(); //Empty person instance 
    PersonList.Add(contact); 
    } 

後でバインドこの上これはモデルプロパティの検証のために良い作品

@Html.TextBoxFor(m => m.PersonList[PersonList.Count - 1].PrimaryContacts.FirstName) 

あなたinduvidualフィールドへのすべてのフォームを提出するようにウェルとも後に、次の包含のために、あなただけの新しい人を追加します。 ですが、フォームがキャンセルされた場合は、コードの削除欄に注意してください。