0

我是 ASP.NET MVC 的新手,我正在开发一个应用程序。我想在创建视图的下拉列表中绑定数据。

如何绑定下拉列表中的数据?我在这里经历了很多问题和答案......

  1. 我看到通常每个人都建议使用 List<SelectListItem>它的目的是什么?

  2. 将数据绑定到下拉列表时是否需要使用 ViewModel?

我可以获得使用 viewbag 在下拉列表中绑定数据的简单示例吗?

我在控制器中创建了一个列表

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

我想通过这个列表来查看使用 viewbag 并且只想绑定到下拉列表。

这个怎么做 ?

4

1 回答 1

1

我建议使用 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))
于 2013-03-14T07:27:25.837 回答