2016-05-03 11 views
1

「デフォルト値DropDownList」の検索結果が表示されますが、特定の問題が検索した例と回答に記載されていないため、これは重複した質問ではありません。ここでHtml.BeginFormブロックのDropDownListのデフォルト値

背景と詳細を支える続く最初の主要な質問です:

私はHtml.BeginFormブロック内のドロップダウンリストを置くと、どのように私は、デフォルトのDropDownListの値が項目よりも持つことができますリストの最初の項目ですか?私がこれまで行ってきた何

  • SO、Microsoft仮想アカデミー、およびこの特定の問題を解決していない実効答えと様々な検索用語を使用して、一般的なインターネット検索、。
  • Html.DropDownListのオーバーロードをMSDNで調べます。 optionLabelパラメータは、「項目の選択」など、リストの一番上に項目を挿入しますが、これは望ましくない動作です。
  • jQuery、のように動作しますが、私は実際にはという簡単な方法がjQueryを伴わないであることを期待しています。

マイワーキング論:私が学んだ(下記に示す)は、デフォルト値を許可しないと、それはHtml.DropDownListの特定の過負荷を知らない場合ではない方法。

背景情報:MVC 5を学び、チュートリアルやSOの回答からの指示を収集する過程で

、私はビューにHtml.BeginForm()ブロック内に配置されたDropDownListコントロールを作成するためのこのスタイルを学びました。デフォルト値をリストの最初の項目にしたい場合や、「項目を選択する」という上部に挿入された項目を追加したい場合は機能します。

ただし、デフォルト値がリストの最初の値以外の値に意味がある場合があります。

コントローラでは、パラメータのデフォルト値はIndex(string campus = "MRA", string fy = "FY16")に設定され、クエリは正しい結果を返しますが、ページを初めて読み込むときにDropDownListsが適切に設定されません。

コントローラ

public ActionResult Index(string campus = "MRA", string fy = "FY16") 
{ 
    /* The ViewBags feed DropDownLists used to filter the query */ 
    ViewBag.CampusList = new List<string> { "CRA","DRA","MRA","PRA"}; 
    ViewBag.FyList = new List<string> {"FY15","FY16" }; 

    IEnumerable<AssociatedW3SuspensionOrProbation> query = 
      db.AssociatedW3SuspensionOrProbation 
      .Where(m=>m.Campus==campus).Where(m=>m.FY==fy) 
      .OrderBy(m=>m.StudentName).ThenBy(m=>m.LatestEntryDate); 

    return View(query.ToList()); 
}   

ビュー ドロップダウンが正しく機能:フォームが送信されたときに、クエリの結果は、選択されたドロップダウンの値によって選択され、ドロップダウンが選択された値をロードします。

@using (Html.BeginForm()) 
{ 
    <div class="panel panel-default"> 
     <div class="panel-body"> 
      <p> 
       <strong>Campus</strong>: @Html.DropDownList("campus", 
        new SelectList(ViewBag.CampusList)) || 

       <strong>FY</strong>: @Html.DropDownList("fy", 
        new SelectList(ViewBag.FyList)) 
      </p> 
      <div><input type="submit" value="Search" /></div> 
     </div> 
    </div> 
} 

この問題には簡単な答えがありますか、これには全く異なるアプローチが必要ですか?

+0

あなたは '新しいSelectListの(の過負荷を試してみました)'ました選択された値を第2のパラメータとするか? 'new SelectList(ViewBag.CampusList、" MRA ")' –

+0

なぜdownvoteですか?質問はうまく構築されましたか?質問を十分に説明できなかったのですか?私は批判には門を開いていますが、単純に何の説明もせずにダウンワードを得ることは建設的でも有益でもありません。 –

答えて

2

コントローラーアクションにSelectListを作成し、選択された値を設定するために使用できるコンストラクターオーバーロードがありますが、そのためには文字列ではなく2を含むカスタムタイプのList<T>が必要ですTextFieldの場合は1、ValueFieldの場合は1になります。

ViewBag.CampusList = new SelectList(
            new List<string> { "CRA","DRA","MRA","PRA"}, 
            campus // selected value 
            ); 
    ViewBag.FyList = new SelectList(
            new List<string> {"FY15","FY16" }, 
            ,fy // selected value 
            ); 

とあなたのビューで:あなたがここにsecond Constructor overload listed here

を使用する必要が

は、サンプルコードで

@Html.DropDownList("campus", 
       ViewBag.CampusList as SelectList) 

@Html.DropDownList("fy", 
       ViewBag.FyList as SelectList) 
+0

パーフェクト。 'ViewBag.CampusList = new SelectList(新しいリスト {" CRA "、" DRA "、" PRA "}、" MRA ");' –

+0

変数は次のようになります。あなたの行動の中でそれを渡すために使用され、このコードはあなたの行動の中にあるべきです、私はあなたが上記のビューに直接書いたと思います –

+0

いいえ、私はViewBagが定義されているコントローラにデフォルト値を書きました。 –

関連する問題