1

私のビューモデルは次のようになります:

public class ShippingInfo
{
    public string DiagID { get; set; }

    public Collection<AddressInfo> AddressSuggestions { get; set; }
}


public class AddressInfo
{
    public int ID { get; set; }
    public string CompleteAddressInfo { get; set; }
}

ボタンクリック時にフォームを投稿しようとすると、アクションメソッドでラジオボタンの選択が保持されません。

ドロップダウンリストの場合のように、選択を保存するために別の変数を使用する必要がありますか?

@if (Model.AddressSuggestions != null)
    {
    for (int i = 0; i < Model.AddressSuggestions.Count; i++)
    {
        AddressInfo m1 = Model.AddressSuggestions[i];
        @Html.RadioButtonFor(m => m1.CompleteAddressInfo, m1.ID)
        <span>@Model.AddressSuggestions[i].CompleteAddressInfo</span>
        <br/>
    }
    }

フォームを投稿するときに、ラジオボタンの選択がモデルに保持されることを期待しています(モデルバインディング)。誰かが私のコードの問題を指摘してくれれば幸いです。

4

1 に答える 1

2

@ヘルパー呼び出しの前で使用してくださいHtml.RadioButtonFor。そうしないと、ビューに何も出力されません。;また、このヘルパー コールの最後にある を取り除きます。

@if (Model.AddressSuggestions != null)
{
    for (int i = 0; i < Model.AddressSuggestions.Count; i++)
    {
        @Html.RadioButtonFor(
            m => m.AddressSuggestions[i].CompleteAddressInfo, 
            Model.AddressSuggestions[i].CompleteAddressInfo
        )
    }
}

また、引数で何を意味しているのかわかりませんがfalse、ブール値を期待するこのヘルパーのオーバーロードはありません。ヘルパーの 2 番目の引数は、対応するモデル プロパティ値が一致する場合にラジオ ボタンをオンにする値を表します。

たとえば、1 行に 2 つの相互に排他的なラジオ ボタンを配置する場合は、次のようにします。

for (int i = 0; i < Model.AddressSuggestions.Count; i++)
{
    <span>Value 1</span>
    @Html.RadioButtonFor(
        m => m.AddressSuggestions[i].CompleteAddressInfo, 
        "value1"
    )

    <span>Value 2</span>
    @Html.RadioButtonFor(
        m => m.AddressSuggestions[i].CompleteAddressInfo, 
        "value2"
    )
}

Model.AddressSuggestions[i].CompleteAddressInfo等しい場合value1は最初のラジオ ボタンが事前選択され、等しい場合value2は 2 番目のラジオ ボタンが事前選択されます。

繰り返しになりますが、達成しようとしているものと、モデルが保持する値によって異なります。

于 2012-05-08T13:35:08.670 に答える