사용자 입력과의 상호 작용이 훨씬 쉬우므로 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();
}
다음보기에서 선택 목록을 만듭니다.
ent가 제공되면 DropDownList HTML 도우미는 자동으로 같은 이름의 SelectList ViewBag 속성에 바인딩합니다. 비록 당신이 말했듯이, 일반적으로 ViewModel을 사용하는 것이 더 좋습니다. –