2010-08-02 3 views
12

이미 많은 비슷한 질문이 있다는 것을 알고 있습니다 만, 이것을 파악하기 위해 많은 시간을 보냈으며 다른 답변이 도움이되지 않습니다!DropDownListFor - 문자열의 간단한 목록을 표시합니다.

MVC를 사용하는 드롭 다운 목록에 문자열 목록을 표시하고 싶습니다. 에 문자열 목록을 표시하고 싶습니다. 이게 정말 그렇게 어려운가요? "텍스트"와 "값"분리 (MVC가 필요하지만)가 표시되지 않습니다. 사용자에게 표시되는 문자열은 내 가치입니다.

나는 지금까지 다음 가지고 :

컨트롤러 :

public ActionResult Index() 
{ 
    return View(new HomeViewModel()); 
} 

뷰 모델 :

public class HomeViewModel 
{ 
    public HomeViewModel() 
    { 
     Items = new SelectList(new[] 
     { 
      new SelectListItem { Text = "One", Value = "One" }, 
      new SelectListItem { Text = "Two", Value = "Two" }, 
     }); 
    } 

    public SelectList Items { get; set; } 
} 

보기 :

<% using (Html.BeginForm()) { %> 
    <% Html.DropDownListFor(x => x.Items, Model.Items); %> 
    <input type="submit" value="Go!" /> 
<% } %> 

그러나 아무것도 드롭 다운 목록이 표시되는 것 같습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

10
<%= Html.DropDownListFor(x => x.Items, Model.Items) %> 

표현과 문장을 혼동스럽게합니다. Html 도우미는 문자열을 반환하므로 =을 사용하여 'html-value'를 출력해야합니다 (그 뒤에는 ;이 없습니다).

업데이트 :

Items = new SelectList(new[] 
         { 
          new SelectListItem {Text = "One", Value = "One"}, 
          new SelectListItem {Text = "Two", Value = "Two"}, 
         }, "Text", "Value"); 

업데이트 2 :

public class HomeViewModel 
{ 
    public HomeViewModel() 
    { 
     Items = new SelectList(new[] { "One", "Two" }); 
     CurrentItem = "Two"; 
    } 

    public SelectList Items { get; set; } 
    public string CurrentItem { get; set; } 
} 

그리고보기에 : 사실 당신의 사건에 대한

당신이 더 간단한 방식으로 그것을 할 수 :

<%= Html.DropDownListFor(x => x.CurrentItem, Model.Items) %> 
+0

아아, 어리석은 실수! 이제 두 항목으로 드롭 다운 목록을 볼 수 있지만 둘 다 System.Web.Mvc.SelectListItem을 말합니다. SelectList의 생성자를 호출 할 때 문제가있는 것 같습니다. – Grokys

+0

오 예 - 생성자에서 드롭 다운에 표시 할 필드를 지정해야합니다. 그렇지 않으면 기본 SelectListItem.ToString()이됩니다. – Yakimych

+0

고맙습니다. 업데이트 2는 내가 찾고있는 것입니다. :) – Grokys

관련 문제