0

以下のフォームがあります。

ここに画像の説明を入力

表示されるフィラー リストは、ユーザーが前の画面で「カプセル サイズ」として選択したものによって異なります。つまり、ユーザーが前の画面で「カプセル 0」を選択して [送信] をクリックすると、この画面にそのカプセルのフィラーのリストが表示されます。それはすべて完璧に機能します。私ができる必要があるのは、このフォームで選択されたフィラーをキャプチャすることです。ユーザーがこのフォームで [作成] をクリックすると、コードは "Process" コントローラーで "GetResults" メソッドを呼び出します。

public ActionResult GetResults(ProcessViewModel vm)
{
    List<Results> results = context.GetResults();
    return View(results);
}

そして、この特定の View が動作している ViewModel は次のとおりです。

public class ProcessViewModel
{
    public audit_session AuditSession { get; set; }

    public int NumberOfCapsules { get; set; }

    public int CapsuleFK { get; set; }

    public audit_ingredient_active Active1 { get; set; }
    public audit_ingredient_active Active2 { get; set; }
    public audit_ingredient_active Active3 { get; set; }
    public audit_ingredient_active Active4 { get; set; }
    public audit_ingredient_active Active5 { get; set; }
    public audit_ingredient_active KeyActive { get; set; }

    public audit_ingredient_filler Filler { get; set; }

    public bool E4M { get; set; }
    public bool K100M { get; set; }

    public List<filler> Fillers { get; set; }
}

私ができるようにしたいのは、選択したフィラーをキャプチャし、それをViewModelのフィラーに何らかの方法でバインドすることです。これどうやってするの?他のすべては正しくバインドされています (E4M、K100M、および表示されないフォーム上の他のすべてのフィールド)。

フィラー リストのマークアップは次のようになります。このマークアップに 100% の自信があるわけではないため、ここに問題があると思われます

    <label>Choose Filler:</label><br />
    <fieldset data-role="controlgroup">
        @foreach (var i in Model.Fillers)
        {
            @Html.RadioButtonFor(x => x.Filler, "false", new { name = "radio-choice", id = i.pk });
            <label for="@i.pk">@i.name</label>
        }
    </fieldset>
4

1 に答える 1

0

ラジオボタン名をオーバーライドしているためFiller、デフォルトのモデルバインダーに依存する代わりに、プロパティを手動でバインドしてみることができます。

string radio_choiceコントローラの署名にパラメータを追加して(またはを使用して直接キャプチャし)、それらをのプロパティにRequest.Form["radio-choice"]割り当てる必要がある場合があります。Fillervm

于 2013-02-21T02:37:39.373 に答える