2016-05-14 11 views
0

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); 
} 

はこの正しい符号化であるか、これは悪い習慣を拾うの一例ですか?

+0

ですが、プロパティ' SelectedCampus'を有し、かつ、それに結合しないことは少し無意味です。これはちょうど 'CampusList = new SelectList(新しいリスト {" CRA "、" DRA "、" MRA "、" PRA "});'(最後のパラメータを省略して) '@ Html.DropDownListFor 'm.SelectedCampus、Model.CampusList)' –

+0

ビューモデルのパラメータのないコンストラクタが必要な場合や、フォームを送信するときにコードが例外をスローすることにも注意してください。そして、典型的には、ビューモデル自体ではなく、 'SelectList'プロパティの設定を担当するコントローラ(あなたの場合はそれほど重要ではありませんが、ビューモデルのコンストラクタでデータベースにアクセスしている場合でしょう) –

+0

これは、私は切断している。コントローラは、(フォームをポストすることによって)私が選択した値を知り、それに応じてクエリをリフレッシュする方法をどのようにしますか?これまでのところ、コンストラクタパラメータの使用が私が見た唯一の方法です。 –

答えて

1

あなたのビューモデルは、ビューモデルが構築されているときにそのアイテムをビューモデルに渡し、そこからSelectListItemsを生成するだけです。 @Rubix_Revenge、それはコントローラの仕事です。

ものは何でも、これはあなたが `SelectList`を生成する方法と間違って何もありませんcarrect方法

CampusList = new SelectList(new List<string> {"CRA","DRA","MRA","PRA" }); 
+0

これは、SelectListの定義について答えた主な質問に確実に答えます。 –

関連する問題