【问题标题】:ASP.NET MVC - Populate a drop down listASP.NET MVC - 填充下拉列表
【发布时间】:2010-03-07 16:02:31
【问题描述】:

我是 ASP.NET MVC 的新手。我试图弄清楚如何从我的数据库中的值创建一个基本的下拉列表。在 ASP.NET 网络表单中,我知道我可以像这样加载一个下拉列表:

Page.aspx

<asp:DropDownList ID="myDropDownList" runat="server" DataTextField="FullName" DataValueField="ID" OnLoad="myDropDownList_Load" />

Page.aspx.cs

void myDropDownList_Load(object sender, EventArgs e)
{
  if (Page.IsPostBack == false)
  {
    List<Person> people = GetPeopleFromDatabase();
    myDropDownList.DataSource = people;
    myDropDownList.DataBind();
  }
}

如何在 ASP.NET MVC 中做同样类型的事情?谢谢!

【问题讨论】:

  • 看看这篇解释一切的博文:Drop-down Lists and ASP.NET MVC
  • @LenielMacaferi 建议 SelectList 是您的朋友,在您的视图模型中创建一个。

标签: c# asp.net-mvc drop-down-menu populate


【解决方案1】:

型号

public class EditSongViewModel
{        
    public int AlbumId { get; set; }
    public string Title { get; set; }                
    public int TrackNumber { get; set; }
    public IEnumerable<SelectListItem> Albums { get; set; }
}

扩展方法

public static IEnumerable<SelectListItem> ToSelectListItems(
              this IEnumerable<Album> albums, int selectedId)
{
    return 
        albums.OrderBy(album => album.Name)
              .Select(album => 
                  new SelectListItem
                  {
                    Selected = (album.ID == selectedId),
                    Text = album.Name,
                    Value = album.ID.ToString()
                   });
}

从数据库中获取数据

model.Albums = _repository.FindAllAlbums().ToSelectItems(selectedId);

查看

@Html.DropDownList("AlbumId", Model.Albums)

或者更好:

@Html.DropDownListFor(model => model.AlbumId, Model.Albums)

看看这篇解释一切的博文:

Drop-down Lists and ASP.NET MVC

【讨论】:

  • 在这个例子中,model.AlbumId 来自哪里?我没有在您的模型上看到“AlbumId”定义
  • @derraro 太棒了...您发现了一个错误!刚刚再次打开我答案底部的链接,看到作者在EditSongViewModel 中添加了AlbumId。当我在 3 年前添加我的答案时,模型中没有东西,当然应该是。 :D
  • @Lenial Macaferi 感谢您的澄清。 'AlbumId' 在这里代表什么?它是否总是代表“选定的 AlbumId”?
  • @dferraro:没错。它是包含从下拉列表中选择的 AlbumId 的支持字段。
  • 在Controller中使用SelectListItem之类的UI类是不是个好主意?
【解决方案2】:

在 MVC2 中,在您的视图中使用 &lt;%=Html.DropListFor(x =&gt; x.MemberName, Model.DropListItems)%&gt;,并在您的控制器中使用包含数据库中项目的新 SelectList 填充 DropListItems。

我相信 Nerd Dinner-sample 包含此内容,如果您是 MVC 新手,那么您真的应该仔细阅读并创建 Nerd Dinner 应用程序,因为您可以从中学到很多东西,即使您打算不使用他们用什么。

【讨论】:

    猜你喜欢
    • 2014-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    相关资源
    最近更新 更多