我建议使用 ViewModel,因为它使与用户输入的交互变得更加容易。这是一个如何将数据从 ViewModel 绑定到 View 中的下拉列表的示例。首先,ViewModel:
public class CrowdViewModel
{
public string SelectedPerson { get; set;}
public IEnumerable<SelectListItem> People { get; set; }
}
所以是的,你是对的 - 使用 SelectListItems 的集合。我猜在您的情况下,SelectListItem 的 Value 和 Text 属性将是相同的。你可以像这样把你的 List 变成 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);
}
现在您需要将该 ViewModel 的属性绑定到视图上的 DropDown。如果您使用的是 Razor ViewEngine,代码将如下所示:
@model MyApp.ViewModels.CrowdViewModel
@using (Html.BeginForm())
{
@Html.DropDownListFor(model => model.SelectedPerson, Model.People)
}
现在,当您发布该表单时,MVC 会将选定的值绑定到 ViewModel 的 SelectedPerson 属性!
[HttpPost]
public ActionResult Home(CrowdViewModel viewModel)
{
// viewModel.SelectedPerson == whatever the user selected
// ...
}
就这么简单!
更新:
如果您真的想使用 ViewBag(不要这样做),您可以通过 Controller 操作传递您的列表,如下所示:
[HttpGet]
public ActionResult Home()
{
ViewBag.People = new List<string> { "Bob", "Harry", "John" };
return View();
}
然后在您的视图上创建一个 SelectList:
@Html.DropDownList("SelectedPerson", new SelectList(ViewBag.People, Model))