2010-06-30 1 views
21

다음 코드에서 selectListItems은 내 Enum에 대한 모든 올바른 값을 가진 SelectListItems의 일반적인 목록입니다.ASP.Net MVC SelectLIst 및 List <SelectListItems> 문제

첫 번째 foreach 루프가 정상적으로 작동합니다. 그러나 실제 선택 목록을 만들고 selectListItems을 전달하면 모든 값이 손실됩니다. 어떻게 그 값들을 그대로 유지할 수 있습니까?

foreach (SelectListItem item in selectListItems) 
{ 
    string tex = item.Text; 
    string val = item.Value; 
    string sel = item.Selected.ToString(); 
} 

SelectList selectList = new SelectList(selectListItems); 

foreach (SelectListItem slid in selectList) 
{ 
    string tex = slid.Text; 
    string val = slid.Value; 
    string sel = slid.Selected.ToString(); 
} 
+1

SelectList selectList = new SelectList (selectListItems, "Text", "Value"); 이것은 작동합니다. 나는 그것이 왜 그것 없이는 작동하지 않는지 모르겠다. 누군가? – Ted

답변

50

빌드 할 위치를 변경하여 값을 찾을 위치를 지정해야합니다. 귀하의 경우에는 다음과 같습니다 :

SelectList selectList = new SelectList(selectListItems, "Value", "Text"); 

이것은 선택한 항목을 전달하지 않습니다. 이 경우 어떤 항목이 선택된 항목인지 알아 내고 네 번째 매개 변수를 통해 값을 전달해야합니다.

List<SelectListItem> items = new List<SelectListItem>(); 
items.Add(new SelectListItem() { Text = "Test1", Value = "1", Selected = false }); 
items.Add(new SelectListItem() { Text = "Test8", Value = "8", Selected = true }); 
items.Add(new SelectListItem() { Text = "Test3", Value = "3", Selected = false }); 
items.Add(new SelectListItem() { Text = "Test5", Value = "5", Selected = false }); 

SelectList sl = new SelectList(items, "Value", "Text", "8"); 

또한 도움이 될 수 this SO thread을 확인 할 수 있습니다 : 여기

은 예입니다.

편집 : 귀하의 의견을 보았는데, 기본적으로 TextValue 필드를 찾는 것이 현명하지 않기 때문에 자신의 의견을 보았습니다. 일종의 객체를 전달할 수 있으며 TextValue 속성에 매핑 할 속성을 정의하여 바인딩 할 수 있습니다.