0

C#.NET MVC3 (Razor) を使用して単純なフォームを作成しています。しかし、その形式では、リストの内容をラジオボタンの形式で出力する必要があります。しかし、これがどのように機能するかわかりません:

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

しかし、これはうまくいきません。

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

どうすればこれを機能させることができますか?

4

3 に答える 3

6

これらのループを記述する代わりに、エディター テンプレートを使用することをお勧めします。

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

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

@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このテンプレートを複数のビュー モデル間で共有したくない場合です。コントローラー。

于 2012-05-08T13:43:38.447 に答える
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++;
}
于 2012-05-08T13:52:16.727 に答える
0

構文は少し異なります。

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

他のすべては問題ないように見えます。

[編集] おっと、疲れているに違いない。ええ、次は問題ないように見えますが、表示のみです。エディター テンプレートについては、Darin の回答を確認してください。

[EDIT2]質問からは明らかではありませんが、コメントからitem、 foreach は別の 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>
    }
}

あれですか?正しく理解しているかどうかはまだわかりません。:)

于 2012-05-08T13:38:37.400 に答える