2017-11-13 4 views
-1

データベースから値を取り込む必要がある2つのドロップダウンリストがあります。 私はストアドプロシージャとその結果が正しいことを確認しました。私もコントローラまでデバッグして、正しい値を得ているように見えます。データベースからのDropDownListForの値の設定

@ Html.DropDownlistFor構文を理解するのに助けが必要です。私が使っているものは間違っています。どんな助け?

モデル:

public class DropDownConfiguration 
     { 
      public string Project { get; set; } 

      public string LineID { get; set; } 

     } 

コントローラー:

[ActionName("DetailsForm")] 
     [HttpGet] 
     public ActionResult DetailsForm() 
     { 
      try 
      { 
       IEnumerable<DropDownConfiguration> dropConfig = new List<DropDownConfiguration>(); 

       dropConfig = floorService.DropDownList(); 


       DetailsViewModel model = new DetailsViewModel() 
      { 

       dropConfig = dropConfig, 
      }; 
       return View("DetailsForm",model); 

      } 
      catch (Exception ex) 
      { 
       return View("_error"); 
      } 

     } 

リポジトリ:

public IEnumerable<DropDownConfiguration> DropDownList() 
      { 
       var model = new List<DropDownConfiguration>(); 

       using (var dbCmd = defaultDB.GetStoredProcCommand("dbo.GetLineIDProject")) 
       { 

        var varCmd = defaultDB.ExecuteReader(dbCmd); 

        while (varCmd.Read()) 
        { 
         model.Add(new DropDownConfiguration() 
         { 
          LineID = varCmd.IsDBNull(0) ? "" : varCmd.GetString(0), 
          Project = varCmd.IsDBNull(1) ? "" : varCmd.GetString(1), 
          Quarter = varCmd.IsDBNull(2) ? 0 : varCmd.GetInt32(2), 
          Year = varCmd.IsDBNull(3) ? 0 : varCmd.GetInt32(3) 

         }); 

        } 
       } 
       return model; 
      } 

Htmlの(ここでは、プロジェクト、2ドロップダウンリストLineIDです)----- NEEDヘルプここ------

@Html.DropDownListFor(m => m.dropConfig.FirstOrDefault().LineID, "--Select LineID--", new { @class = "form-control" }) 

@Html.DropDownListFor(m => m.dropConfig.FirstOrDefault().Project, "--Select Project--", new { @class = "form-control" }) 
@Controllerデバッグの

:あなたがする必要がどのような enter image description here

+0

あなたの意見は理にかなっていません。ドロップダウンリストには2つのプロパティが必要です.1つはバインドし、もう1つは表示するオプションです。モデルにバインドするプロパティがありません。 [this Q/A](https://stackoverflow.com/questions/34366305/the-viewdata-item-that-has-the-key-xxx-is-of-type-system-int32-but)をご覧ください。 -must-be-o)ドロップダウンリストを生成するために –

+0

あなたの 'DropDownListFor'設定が間違っていると思います。選択した値をバインドするために 'FirstOrDefault()'を使う理由は?また、 'IEnumerable 'を使用して、データコレクションリストとして2番目の引数にDDLを設定しません。 –

+0

ありがとうございます。これをLemmeでチェックしてください。 – beginner

答えて

0

は、新しい選択リストを作成することです。

public class DropDownConfiguration 
     { 
      public string Project { get; set; } 

      public string LineID { get; set; } 

      public SelectList dropDownSelectList{ get; set; } 

     } 

[ActionName("DetailsForm")] 
     [HttpGet] 
     public ActionResult DetailsForm() 
     { 
      try 
      { 
      DropDownConfiguration dropConfig = new DropDownConfiguration(); 

     IEnumrebale<DropDownConfiguration> selectList = floorService.DropDownList(); 


       DetailsViewModel model = new DetailsViewModel() 
      { 

       dropConfig = selecrList , 
      }; 
       dropConfig.dropDownSelectList = new SelectList(selectList, "Value", "Text"); 
       return View("DetailsForm",model); 

      } 
      catch (Exception ex) 
      { 
       return View("_error"); 
      } 

     } 

ビュー:

@Html.DropDownListFor(m => m.LineID, Model.dropDownSelectList, "--Select LineID--", new { @class = "form-control" }) 

あなたのコードは不明です。コントローラモデルとリポジトリが正しく書かれていないため、モデルを分離してリポジトリクラスを作成する理由がわかりません(ビジネスロジックがモデルに含まれている必要があるため) DetailsViewModelに何が含まれているかについての手掛かりはなく、

そして、最初にビューのデフォルト設定をしたときは、フォームを送信すると、最初のフィールドの値が取得されるか、任意の値を入力し、さらにドロップダウンリストに値を設定する場合は、1つのフィールドのみを入力したとします。

コードを見直して、コードを見直してくださいクリア。

+1

あなたの答えをありがとう。私はあなたの提案に従って変更を行っています。ここではValue&Textとは何ですか? – beginner

+0

値フィールド

関連する問題