2013-03-14 2 views
0

저는 ASP.NET MVC에 익숙하지 않아 응용 프로그램을 개발 중입니다. 작성보기의 드롭 다운 목록에 데이터를 바인딩하고 싶습니다.MVC에서 드롭 다운 목록으로 렌더링 된 쿼리

드롭 다운에서 데이터를 바인딩하는 방법은 무엇입니까? 나는 내가 본

  1. 는 일반적으로 모든 사람이 List<SelectListItem> 그것의 목적은 무엇인가 사용하도록 제안 ... 많은 질문 여기에 대한 답변을 통해 이동이?

  2. 데이터를 드롭 다운 목록에 바인딩하는 동안 ViewModel을 사용해야합니까?

데이터가 뷰 북을 사용하여 드롭 다운되는 간단한 예제를 얻을 수 있습니까?

나는 컨트롤러

List<string> items = new List<string>(); 

의 목록을 생성하고 난 viewbag를 사용하여 볼 단순히 드롭 다운 목록에 바인딩 할이 목록을 전달하려는.

어떻게 하시겠습니까?

답변

1

사용자 입력과의 상호 작용이 훨씬 쉬우므로 ViewModel을 사용하는 것이 좋습니다. 다음은 ViewModel의 데이터를 뷰의 드롭 다운에 바인딩하는 방법의 예입니다. 먼저, ViewModel :

public class CrowdViewModel 
{ 
    public string SelectedPerson { get; set;} 
    public IEnumerable<SelectListItem> People { get; set; } 
} 

그래, 맞아 - SelectListItems 컬렉션을 사용하십시오. 귀하의 경우에는 SelectListItem의 Value 및 Text 속성이 동일 할 것입니다. 당신은 이런 식으로는 IEnumerable로 목록을 돌 수 있었다 :

[HttpGet] 
public ActionResult Home() 
{ 
    // get your list of strings somehow 
    // ... 

    var viewModel = new CrowdViewModel 
    { 
     People = items.Select(x => new SelectListItem { Text = x, Value = x }) 
    } 

    return View(viewModel); 
} 

이제 바인딩 할 필요가보기에 드롭 다운에 뷰 모델의 속성입니다. 당신은 면도기 ViewEngine를 사용하는 경우, 코드는 다음과 같이 표시됩니다

@model MyApp.ViewModels.CrowdViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.DropDownListFor(model => model.SelectedPerson, Model.People) 
} 

을 해당 양식을 게시 할 때 이제 MVC는 뷰 모델의 SelectedPerson 속성에 선택된 값을 바인딩합니다!

[HttpPost] 
public ActionResult Home(CrowdViewModel viewModel) 
{ 
    // viewModel.SelectedPerson == whatever the user selected 
    // ... 
} 

마찬가지로 간단합니다!


업데이트 : 당신이 정말로 ViewBag를 (그것을하지 않음) 사용하려면

, 당신과 같이 당신의 컨트롤러 액션에서 통해 목록을 전달할 수 있습니다

[HttpGet] 
public ActionResult Home() 
{ 
    ViewBag.People = new List<string> { "Bob", "Harry", "John" }; 
    return View(); 
} 

다음보기에서 선택 목록을 만듭니다.

+0

ent가 제공되면 DropDownList HTML 도우미는 자동으로 같은 이름의 SelectList ViewBag 속성에 바인딩합니다. 비록 당신이 말했듯이, 일반적으로 ViewModel을 사용하는 것이 더 좋습니다. –

관련 문제