2012-05-08 8 views
0

私はC#.NET MVC3(Razor)を使って簡単なフォームを作成しています。しかし、その形で私はラジオボタンの形でリストの内容を印刷する必要があります。しかし、私はこれがどのように動作するのか分かりません:BeginFormのForeachとRadioButtonFor()要素の要素を表示

@using(Html.BeginForm("Method", "Controller", FormMethod.Post)) 
{ 
    foreach (Items item in Model.Items) 
    { 
     <div> 
      @Html.RadioButtonFor(item->itemId) 
      @Html.LabelFor(item->description) 
     </div> 
    } 
} 

これは動作しません。

おそらく通常のhtmlタグを使用してラジオボタンを作成できます。しかし、データは自動的に右側に保存されませんか?

どうすればこの作品を作成できますか?

+0

を次のようにゼロのインデックスベースのソリューションを実装するために必要なすべてを保存したい場合は? – archil

+0

@archilそのような 'item-> property'を直接割り当てることはできません。通常は私はやっています---(model => model.Property)---今はforeachループに入っていて、私は 'item'のデータが必要です。---今すぐエラーが表示されます:** 'RadioButtonFor'メソッドのオーバーロードは1つの引数をとります** – w00

答えて

6

私の代わりに、これらのループを書くのエディタのテンプレートを使用して、あなたをお勧めします

@model ItemViewModel 
<div> 
    @Html.RadioButtonFor(x => x.itemId, "1") 
    @Html.LabelFor(x => x.description) 
</div> 

対応するビューモデルプロパティを選択するラムダ式に加えて、Html.RadioButtonForヘルパーに2番目の引数を渡す必要があることに注意してください。この引数は、フォームが送信されるときにユーザーがこのラジオボタンをチェックすると、サーバーに送信され、対応するプロパティにバインドされる値を表します。

また、これは慣習によって動作することに注意してください。メインビューモデルのItemsプロパティがタイプIEnumerable<ItemViewModel>であると仮定した場合、このテンプレートを必要としない場合は、定義する必要があり、このコレクションの各要素にレンダリングされる対応するエディタテンプレートは~/Views/Shared/EditorTemplates/ItemViewModel.cshtmlまたは~/Views/CurrentController/EditorTemplates/ItemViewModel.cshtmlです。複数のコントローラ間で共有されます。

+0

ありがとう、これは動作しているようです – w00

0

構文は少し異なっている:他に

@Html.RadioButtonFor(model => item.ItemId) 
@Html.LabelFor(model => item.Description) 

すべてが正常に見えます。

[EDIT]おっと、私は疲れていなければなりません。ええ、次のように見えますが、のディスプレイの場合のみです。エディタテンプレートのDarinの答えを確認してください。

[EDIT2]質問からはっきりとは分かりませんが、foreachのitemが別のEnumerableであるというご意見からです。巣のforeachのプロパティを表示し、その後、ループ:

@foreach(var itemList in Model.Items) 
{ 
    foreach(var item in itemList) 
    { 
     <div> 
      @Html.RadioButtonFor(model => item.ItemId) 
      @Html.LabelFor(model => item.Description) 
     <div> 
    } 
} 

は、それがということですか?私はそれが正しく理解されているかどうかまだ分かりません。

@model MyViewModel 
@using(Html.BeginForm("Method", "Controller", FormMethod.Post)) 
{ 
    @Html.EditorFor(x => x.Items) 
} 

と自動的にモデル(~/Views/Shared/EditorTemplates/ItemViewModel.cshtml)の各要素に対してレンダリングされる、対応するエディタのテンプレートを定義します::)

+0

私は知っていますが、今回はforeachループです。私のモデルにはIEnumerableリストがあり、foreachループでそれを調べています。 IEnumerableのデータを見つけた各項目のラジオボタンに表示する必要があります。何か案が? – w00

+0

ループ内の 'item'のそれぞれが' ItemId'と 'Description'を持つクラスであると仮定すると、あなたのバージョンは構文のために修正されました - OKでなければなりません。 –

2

foreachループ内にいるので。次のように動作します。

foreach (Items item in Model.Items) 
{ 
    <div> 
     @Html.RadioButtonFor(item.itemId) 
     @Html.LabelFor(item.description) 
    </div> 
} 

あなたがそれらあなたが正確に動作しません何

@{int i = 0} 
foreach (Items item in Model.Items) 
{ 
    <div> 
     @Html.RadioButtonFor(model =>model[i].itemId) 
     @Html.LabelFor(model =>model[i].description) 
    </div> 
    i++; 
} 
関連する問題