2014-12-19 2 views
0

누군가 내가 여기서 잘못하고있는 것을 지적 해 주길 바랍니다. DbContext에서 여러 개체를 검색하고이를 검색 할 때 SelectListItem으로 변환하려고합니다. 나는 이것에 대한 여러 게시물을 읽었고 나는 똑같은 일을하는 것처럼 보입니다.하지만이 코드를 실행하면 SelectListItem의 SelectListItems 이름이 "System.Web.MVC.SelectListItem"이고 Id가 null입니다. 코드는 다음과 같습니다.SelectListItems로 엔티티 가져 오기

 var wtf = db.Departments.ToList().Select(m => new SelectListItem 
     { 
      Text = m.Name, 
      Value = m.Id.ToString() 
     }); 

     SelectList dafuq = new SelectList(wtf); 

     ViewBag.Departments = dafuq; 

     return View(model); 

예외가 발생하지 않습니다.

예상대로 개체를 반환하기 전에 그냥

var omg = db.Departments.ToList(); 

를 호출하는 경우.

감사합니다.

+0

에 참고하시기 바랍니다 당신이하지를 ToList()를 호출해야합니다 –

+0

Linq toString 메서드가 포함되어 있지 않습니다 내 이해, 그래서 그것을 linq 그것을 obj 수 있도록합니다. 그 방법을 사용하는 ToList와 ects? – Tevis

+0

변수 이름 지정 규칙이 너무 이상합니다! – Manoj

답변

2

대신을 시도해보십시오

var wtf = db.Departments.ToList() 
var dafuq = new SelectList(wtf, "Id", "Name"); 
ViewBag.Departments = dafuq; 

return View(model); 
+0

'.ToList()'를 사용하면 추가 오버 헤드가 필요하지 않습니다. 당신은'ViewBag.Departments = new SelectList (db.Departments, "Id", "Name");'를 사용할 수 있습니다. –

1

당신은 SelectList 할 필요가 없습니다. 1- 매개 변수 생성자로 생성 된 SelectListIEnumerable의 모든 값을 Convert.ToString()을 호출하여 문자열로 변환하므로 여기에 표시됩니다.

IEnumerable<SelectListItem> (이는 wtf)이 있으면 DropDownList 도우미로 직접 전달할 수 있습니다.

은 그냥 드롭 다운에서 wtf 객체를 사용하고 SelectList 건너 뜁니다

ViewBag.Departments = wtf; 

@Html.DropdownListFor(m => m.Something, ViewBag.Departments); 

을 그리고 vorninp가 지적했듯이, 당신은 .Select()를 호출하기 전에 .ToList()를 호출 할 필요가 없습니다. 사실, 나는 그것을 반대하는 것이 좋습니다.

0

이 형식의 생성자는 내부적으로 selectlistitems로 변환 된 항목을 포함하는 열거 형을 기대합니다.

그래서 당신은 departmens을 통과하고 텍스트와 데이터 필드의 특성을 가리킬 수 있습니다

new SelectList(departments,"Id","Name") 
0

또는 꺼야 단지 ..

ViewBag.Departments= db.Departments.ToList(); 

그리고보기 -

@Html.DropdownListFor(m=>m.Departments,new SelectList(ViewBag.Departments,"ID","DepartmentName"),"Select Dropdown...",htmlAttributes:new{})