2017-11-13 12 views
-1

값이 데이터베이스에서 채워 져야하는 2 개의 드롭 다운 목록이 있습니다. 저장된 proc과 그 결과가 정확한지 확인했습니다. 나는 심지어 컨트롤러까지 개까지 디버깅했고 올바른 값을 얻고있는 것처럼 보입니다.데이터베이스에서 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; 
      } 

(여기되는 2 드롭 다운 목록 LineID 프로젝트) ----- html로 도움이 필요 여기 ------

@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에 16,

: 당신이해야 할 일은 enter image description here

+0

보기가 이해가되지 않습니다. 드롭 다운 목록에는 바인딩 할 속성과 옵션을 표시하는 속성 2 개가 필요합니다. 모델에 바인딩 할 속성이 없습니다. [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 '을 사용하여 두 번째 인수에서 데이터 컬렉션 목록으로 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에 포함되어있는 것에 대한 단서가 없으며

그리고 사용자가보기에 기본적으로 사용자가했을 때, 양식을 제출할 때 첫 번째 필드의 값 또는 null이 항상 나타납니다. t 값을 채우고 드롭 다운 목록을 채우는 것이 목표라면 하나의 입력란 만 채웠을 것입니다.

코드를 검토하여 스 니펫에 표시된대로 필요한 변경을 수행하고 코드가 취소.

+1

답변 해 주셔서 감사합니다.귀하의 제안에 따라 변경하고 있습니다. 여기에 가치와 텍스트는 정확히 무엇입니까? – beginner

+0

값 필드