代码之家  ›  专栏  ›  技术社区  ›  Kelsey

在ASP.NET MVC 2中实现DropDownList的最佳方法?

  •  12
  • Kelsey  · 技术社区  · 15 年前

    我试图理解实现 DropDownList 在ASP.NET MVC 2中,使用 DropDownListFor 帮手。这是一个由多部分组成的问题。

    首先,将列表数据传递到视图的最佳方法是什么?

    1. 将模型中的列表 SelectList 包含数据的属性
    2. 把名单通过 ViewData

    如何在 下拉框 ?我应该把它建在 选择列表 当我创建它或有其他方法告诉助手自动创建空值时?

    最后,如果由于某种原因出现服务器端错误,我需要用 下拉框 ,是否需要再次获取列表值以传递到视图模型中?这些数据不会在日志之间维护(至少在我通过视图模型传递数据时不会维护),所以我将再次获取它(它是缓存的)。我说得对吗?

    5 回复  |  直到 11 年前
        1
  •  9
  •   p.campbell    15 年前

    您最好在控制器中创建一个selectlist-在这里使用我的扩展方法: http://blog.wekeroad.com/2010/01/20/my-favorite-helpers-for-aspnet-mvc

    使用与属性名相同的键将其弹出到视图数据中: ViewData["statusid"]=MySelectList

    然后就用 Html.DropDownFor(x=>x.StatusID) 你已经准备好了。

        2
  •  3
  •   Leniel Maccaferri    12 年前

    部分回答:

    1. 最好的方法是通过 ViewModel 这样地:

      public SelectList Colors
      {
          get
          {
              // Getting a list of Colors from the database for example...
              List<Color> colors = GetColors().ToList();
      
              // Returning a SelectList to be used on the View side
              return new SelectList(colors, "Value", "Name");
          }
      }
      
    2. 要获取空白或默认选项,如(--选择颜色--),可以在视图侧执行此操作:

      @Html.DropDownListFor(m => m.Color, Model.Colors, "-- Pick a color --")
      
    3. 如果列表是 视图模型 .


    看看下面的博客文章。它可以给你一些提示:

    Drop-down Lists and ASP.NET MVC

        3
  •  2
  •   CRice    15 年前

    你可以这样做:

    <%= Html.DropDownListFor((x => x.ListItems), Model.ListItems, "")%>
    

    <%= Html.DropDownList("ListItems", Model.ListItems, "")%>
    

    最后一个参数“optionLabel”生成空白列表项

    在这种情况下,您可以看到listems是模型的一个属性。

    我还将视图强类型化为模型。

        4
  •  0
  •   Svante Svenson    15 年前

    (你已经知道了!)

    1. 使用包含数据的SelectList属性传递模型中的列表

    是的,在构建选择列表时添加它。(如果您使用LINQ构建列表,联合可能会派上用场。)

    是的,是的,你是。

        5
  •  0
  •   James H    15 年前

    我发现使用一系列selectlist项(而不是selectlist)更直观。

    例如,这将创建一个 IEnumerable<SelectListItem> 从一系列可以传递给html.dropDownListfor(…)帮助程序的客户对象。“selected”属性可以选择在下拉列表中设置默认项。

    var customers = ... // Get Customers
    var items = customers.Select(c => new SelectListItem
                                 {
                                     Selected = (c.Id == selectedCustomerId),
                                     Text = c.Email,
                                     Value = c.Id.ToString()
                                 });