2017-11-20 15 views
0

dropdown으로 렌더링되는 간단한 SelectList을 RazorPages로 생성 된 Create 양식에서 사용하려고합니다. 어떤 이유로 든 SelectListmultiple="multiple"으로 렌더링하고 모든 옵션은 화면에 스크롤 막대가있는 dropdown 대신 표시됩니다. 나는이 문제를 내 컨트롤러와 내가 그 속성을 설정하지 않을 때 원하는 결과를 얻었 기 때문에 익명의 타입으로 SelectListItems의 "Text"와 "Value"속성을 설정하려고한다는 사실에 있다고 생각한다.SelectList rendering multiple = "multiple"을 사용하지 않으려는 경우

많은 부분이 저에게 매우 새롭습니다. 누군가 내 코드와 관련하여 일반적인 조언을한다면, 고맙겠습니다.

public IActionResult TestCreate() 
     { 
      //query items for SelectLists 
      var users = from u in _context.Users 
         orderby u.LastName 
         select u; 

      var groups = from g in _context.Group 
         orderby g.Name 
         select g; 

      // Loop through queries above and convert to collections of SelectListItems 
      var enrolleeSelectListItems = from u in users 
             select new SelectListItem() 
             { 
              Value = u.Id.ToString(), 
              Text = u.LastName + ", " + u.FirstName + " " + u.MiddleName 
             }; 

      var groupSelectListItems = from g in groups 
             select new SelectListItem() 
             { 
              Value = g.ID.ToString(), 
              Text = g.Name 
             }; 

      //convert SelectListItem collections into SelectLists within view 
      var cfvm = new Models.TestModels.CreateFileViewModel(); 
      cfvm.EnrolleeId = new SelectList(enrolleeSelectListItems, "Value", "Text"); 
      cfvm.GroupId = new SelectList(groupSelectListItems, "Value", "Text"); 

      return View(cfvm); 
     } 

이 내 시야의 관련 부분입니다 : 여기

public class CreateFileViewModel 
    { 
     public SelectList EnrolleeId { get; set; } 
     public SelectList GroupId { get; set; } 

     [DataType(DataType.Date)] 
     public DateTime StartDate { get; set; } 

     public string Status { get; set; } 
    } 

내 컨트롤러 :

<div class="form-group"> 
       <label asp-for="EnrolleeId" class="control-label"></label> 
       <select asp-for="EnrolleeId" asp-items="Model.EnrolleeId"> 
        <option value="">Select</option> 
       </select> 
      </div> 

가 여기에 어떻게입니다 여기

내보기 모델입니다 브라우저에서 렌더링 :

<select id="EnrolleeId" multiple="multiple" name="EnrolleeId" aria-invalid="false" class="valid"> 
        <option value="">Select</option> 
        <option value="3e60fabd-6901-45a1-ae2a-5056d77f415c"></option> 
        <option value="40ce8b6e-62a5-4c3c-808b-90e36d633ec0"></option> 
        <option value="c0c49df2-da52-4a01-9a8a-47bab6f5496d"></option> 
</select> 

답변

0

asp-for (EnrolleeId)에 사용 된 속성이 컬렉션 유형이기 때문에. SelectList 구현 IEnumerable 이상적으로

당신은 2 곳, 선택한 옵션 값

public class CreateFileViewModel 
{ 
    public int SelectedEnrolleId {set;get;} // This new one 
    public SelectList EnrolleeId { get; set; } 

    public SelectList GroupId { get; set; } 
    [DataType(DataType.Date)] 
    public DateTime StartDate { get; set; } 
    public string Status { get; set; } 
} 

에 대한 옵션의 목록을 구축하는 데 필요한 항목의 컬렉션의 하나가 그리고보기에서

<select asp-for="SelectedEnrolleId" asp-items="Model.EnrolleeId"> 
    <option value="">Select</option> 
</select> 
한다

그러면 name 및 id 속성 값이 SelectedEnrolleId으로 설정된 select 요소가 렌더링됩니다. 따라서 양식을 제출하면 그 양식을 읽어야합니다.

+0

그걸 고쳤습니다. 빠른 답변 감사합니다! – StateofDK

+0

'SelectList' 속성의 이름을 "EnroleeList"(EnrolleeId)와 같은 이름으로 바꾸는 것이 더 바람직합니다. – Shyju

+0

명확성을 위해 SelectList 속성의 이름을 더 변경 했습니까? 아니면 명명 규칙이나 내가 위반하고있는 것이 있습니까? – StateofDK