2011-07-22 10 views
2

は、部分の一部である:.NET MVC3 Html.HiddenFor foreachループ内でコレクションが必要ですか?ここ

@model IEnumerable<BLL.DomainModel.Jerk> 

@foreach (var jerk in Model) 
{ 
    using (Html.BeginForm("AddJerk", "Jerk", FormMethod.Post, new { @class = "jerkListForm" })) 
    { 
    @Html.HiddenFor(jerk =>) 
     @jerk.Name 
     ... 
    } 
} 

私はIEnumerableを内の単一のオブジェクトを探しているのに対し、HiddenForラムダが探しているタイプは、@model(IEnumerableを)と同じです。

私には何が欠けていますか? foreachループ内のコレクションを探しているのはなぜですか?

+0

私はあなたが本当にforeachの中で使いたいのか、それ以外の方法ではないのか疑問に思っています。それは多くの

タグを生成すると思います。 –

答えて

5

すべてのHTML @

を行うことができますMVCは、ページに定義されたモデルのモデルを使用します。あなたができることは、EditorTemplateを作成することです。 ViewフォルダにEditorTemplatesなどのサブディレクトリを作成し、Jerk.cshtmlと呼ばれる新しいビューを追加して、その方法でモデルを割り当てます。

次に、プロパティごとにHtml.HiddenFor(f => f.Name)などを使用できます。これはあなたが期待しているあなたの入力されたアクセスを与えるでしょう。

@foreach(var jerk in Model) { 
    @Html.EditorFor(m => jerk) 
} 

またはあなたを介してEditorForModelところ、それは自動的にループを呼び出し、EditorTemplateを探すことができます:あなたは次のことを行うと、あなたのメインビューで

@Html.EditorForModel() 

EditorForは、あなたがそれをオーバーライドを見つけいずれか、またはそれは、出力1 MVCはあなたが必要な場合があります考えているだろうまで、それはそこから行く最初に作成したEditorTemplateを探します。

+2

もっと詳しいヘルプについては、ブログ投稿を作成して作成方法を詳しく説明しています:http://buildstarted.com/2010/09/10/overriding-displayfor-and-editorfor-to-create-custom-outputs-for- mvc/ – Buildstarted

+0

私はガンダーを持っています。ありがとうございました。 – Withnail

3

代わりにforループを使用します。そうすれば、あなたの隠されたフィールドは正しい名前になります。あなたの例のようなヘルパーを使用すると、すべての隠しフィールドの名前がjerkになり、正しくポストバックされません。

@foreach (var i = 0; i < Model.Count; i++) 
{ 
    var jerk = Model[i]; 
    using (Html.BeginForm("AddJerk", "Jerk", FormMethod.Post, new { @class = "jerkListForm" })) 
    { 
    @Html.HiddenFor(model => model[i]) 
     @jerk.Name 
     ... 
    } 
} 

結合がポストバックであなたには関係していない場合、あなたは、単にAsp.Netが提供するヘルパーについてHtml.HiddenFor(ジャーク=>ジャーク)

+0

forループでは、 - 私は実際にHiddenFor()のユーティリティを掴んでいません。提案していただきありがとうございます。 – Withnail

+0

ああ、あなたは隠されたフィールドに複雑なオブジェクトを保存することはできません。各プロパティまたはジャークオブジェクトを格納する必要があります。 –

8
@model IEnumerable<Type> 

@foreach(var item in Model) 
{ 

    @Html.HiddenFor(model => item) 

} 

Typeが動作するためには、型が直列化可能でなければならないことを忘れないでください。

関連する問題