2013-09-23 6 views
0

v.ID가 내 모델의 정수 속성 일 때 어떻게해야하는지 알아낼 수 있습니까?여러 개의 데이터베이스 열에 대한 @ Html.DropdownList 만들기

ViewBag.VendorID = new SelectList(db.Vendors.Select(v => new SelectListItem 
{ 
    Value = v.ID, 
    Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname) 
}), "Text", "Value"); 

return View(); 

내 모델의 여러 속성을 드롭 다운 목록의 텍스트에 결합하려고합니다. 이 컴파일시 에러를 표시하고 아직 내가보기

@Html.DropDownList("VendorID", (SelectList)ViewBag.VendorID) 

에서 다음

ViewBag.VendorID = new SelectList(db.Vendors.Select(v => new SelectListItem 
{ 
    Value = v.ID.ToString(), 
    Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname) 
}), "Text", "Value"); 

이 라인으로 변경하면 런타임 오류가 발생합니다 :

LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.

어떤 생각이 이 명백하게 간단한 작업을 어떻게 해결할 수 있는지에 대해

감사합니다.

제이슨.

답변

3

Linq-to-SQL에는 string.Format을 직접 사용할 수 없습니다. 먼저 목록을 열거해야합니다

ViewBag.VendorID = db.Vendors.ToList().Select(v => new SelectListItem 
{ 
    Value = v.ID, 
    Text = string.Format("{0} {1} {2}", v.Title, v.Firstname, v.Secondname) 
}); 

return View(); 

참고 위 .ToList()를 추가. DropDownList은 이미 자신을 생성하는 IEnumerable<SelectListItem>을 허용하므로 SelectList 생성자도 제거했습니다.

+0

이 작업은 SelectList 생성자에서 수행되었습니다. 그러나 일단 제거되면 예외가 발생합니다. 'WhereSelectListIterator'2 [Model.Vendor, System.Web.Mvc.SelectListItem]'형식의 개체를 캐스팅하여 'System.Web.Mvc.SelectList'를 입력 할 수 없습니다. 아무 생각 나 그냥 생성자를 그대로 두어야합니까? –

+0

View에서'SelectList'에 대한 캐스트를 제거하기 만하면됩니다.'@Html.DropDownList ("VendorID")'는 VendorID' ViewBag 속성에 바인딩하려고 시도해야합니다. – CodingIntrigue

+0

Perfect. 많은 감사합니다. stackoverflow와 별도로 유용한 리소스를 제안하여이 내용을 자세하게 읽을 수 있습니까? 이 질문에 대한 답을 찾는 것이 훨씬 더 어려워 보였지만 지금까지 읽은 기사와 복수형 기사는 전혀 다루지 않았습니다. –

관련 문제