3

チェックボックスのリストから 3 つの項目を選択するシナリオがあります。これは問題なく動作しますが、チェックボックスのリストが長くなると、ページが扱いにくくなります。だから私はそれを3つのドロップダウンリストに変更したかった. そのため、ページははるかに小さくなりましたが、選択した値を受け入れるドロップダウン リストはありません。

だから私はこのようなコードを試しました

@Html.DropDownListFor(model => model.CheckedLarcenyTypes, new SelectList(Model.LarcenyTypes, "Key", "Value", Model.CheckedLarcenyTypes.Length > 0 ? Model.CheckedLarcenyTypes[0] : null as Int32?), String.Empty, new { id = "Larceny1" })
@Html.DropDownListFor(model => model.CheckedLarcenyTypes, new SelectList(Model.LarcenyTypes, "Key", "Value", Model.CheckedLarcenyTypes.Length > 1 ? Model.CheckedLarcenyTypes[1] : null as Int32?), String.Empty, new { id = "Larceny2" })
@Html.DropDownListFor(model => model.CheckedLarcenyTypes, new SelectList(Model.LarcenyTypes, "Key", "Value", Model.CheckedLarcenyTypes.Length > 2 ? Model.CheckedLarcenyTypes[2] : null as Int32?), String.Empty, new { id = "Larceny3" })

ドロップダウンが正しく作成され、正しい値がバインドされ、POST で値がビュー モデルに送り返されていることがわかります。

ドロップダウンに表示するselectvalueを取得できません。ページを再読み込みすると、ドロップダウンはまだ空白のままです。

ここで何が間違っていますか?これは可能ですか?

4

1 に答える 1

2

あなたの問題は、ここに記載されている内容に関連しています。

セレクションを読む

ポストバック中に編集ビューからの入力を受け入れるために同じモデルを使用している場合、既定のモデル バインダーがすべてのアルバム情報を含む Albums コレクションを再作成し、選択したアルバムを設定すると考えるかもしれません。残念ながら、Web はこの方法では機能せず、Albums コレクションは空になります。

したがって、次のような ViewModel が必要です。

public class LarcenyViewModel
{
    public int CheckedLarcenyType1 { get; set; }
    public int CheckedLarcenyType2 { get; set; }
    public int CheckedLarcenyType3 { get; set; }             
    public IEnumerable<SelectListItem> LarcenyTypes { get; set; }
}

ViewModel を次のように設定します。

LarcenyViewModel larcenyViewModel = new LarcenyViewModel();

// Use a database, enum or whatever to get the LarcenyTypes... :)
larcenyViewModel.LarcenyTypes = new SelectList(
               database.FindAllLarcenyTypes(), "LarcenyId", "Name");

コードを表示:

@Html.DropDownListFor(model => model.CheckedLarcenyType1, Model.LarcenyTypes, String.Empty, new { id = "Larceny1" })
@Html.DropDownListFor(model => model.CheckedLarcenyType2, Model.LarcenyTypes, String.Empty, new { id = "Larceny2" })
@Html.DropDownListFor(model => model.CheckedLarcenyType3, Model.LarcenyTypes, String.Empty, new { id = "Larceny3" })
于 2013-02-06T19:37:36.607 に答える