MVLモデルとビューで選択リストを作成する方法を改善しようとしています。SelectList値をモデルのIEnumerable <SelectListItem>プロパティに割り当てる方法
誰かが私のコードの以前のバージョンで、new
の使用が多すぎるとコメントしました。以下に示すモデルでは、SelectListの定義でnew
を2回使用しています。しかし、私はコードをそれ以外にどのように行うのか分かりません。それは、私が例で定義した唯一の方法です。より良い方法がありますか?
モデルクラスでは、SelectList値をIEnumerable<StudentRoster> StudentRosters
に割り当てます。これは、ビューでアクセスできます。
これは、ビューでDropDownListを作成する方法です。
<p>Select a campus: @Html.DropDownListFor(m=>m.SelectedCampus,Model.CampusList)
これは、モデルでSelectListを定義する方法です。
public class SampleViewModel
{
// This IEnumerable is a SelectList in the Html.BeginForm() block
public IEnumerable<SelectListItem> CampusList { get; set; }
public string SelectedCampus { get; set; }
// This list is the "table" shown in the View that the SelectList filters
public IEnumerable<StudentRoster> StudentRosters { get; set; }
}
コントローラー:
public ActionResult FilterableIndex(string SelectedCampus="MRA")
{
StudentRosterViewModel vm = new StudentRosterViewModel();
vm.StudentRosters = db.StudentRosters
.Where(m => m.Campus == SelectedCampus)
.ToList();
vm.SelectedCampus = SelectedCampus;
vm.CampusList = new SelectList(new List<string>
{"CRA","DRA","MRA","PRA" });
return View(vm);
}
はこの正しい符号化であるか、これは悪い習慣を拾うの一例ですか?
ですが、プロパティ' SelectedCampus'を有し、かつ、それに結合しないことは少し無意味です。これはちょうど 'CampusList = new SelectList(新しいリスト {" CRA "、" DRA "、" MRA "、" PRA "});'(最後のパラメータを省略して) '@ Html.DropDownListFor 'm.SelectedCampus、Model.CampusList)' –
ビューモデルのパラメータのないコンストラクタが必要な場合や、フォームを送信するときにコードが例外をスローすることにも注意してください。そして、典型的には、ビューモデル自体ではなく、 'SelectList'プロパティの設定を担当するコントローラ(あなたの場合はそれほど重要ではありませんが、ビューモデルのコンストラクタでデータベースにアクセスしている場合でしょう) –
これは、私は切断している。コントローラは、(フォームをポストすることによって)私が選択した値を知り、それに応じてクエリをリフレッシュする方法をどのようにしますか?これまでのところ、コンストラクタパラメータの使用が私が見た唯一の方法です。 –