142

在 ASP.NET MVC 2 中,我想编写一个非常简单的下拉列表,它提供静态选项。例如,我想提供“红色”、“蓝色”和“绿色”之间的选择。

4

7 回答 7

194

请参阅此 MSDN 文章Stack Overflow 上的示例用法

假设您有以下 Linq/POCO 类:

public class Color
{
    public int ColorId { get; set; }
    public string Name { get; set; }
}

假设您有以下模型:

public class PageModel 
{
   public int MyColorId { get; set; }
}

最后,假设您有以下颜色列表。它们可能来自 Linq 查询、静态列表等:

public static IEnumerable<Color> Colors = new List<Color> { 
    new Color {
        ColorId = 1,
        Name = "Red"
    },
    new Color {
        ColorId = 2,
        Name = "Blue"
    }
};

在您看来,您可以像这样创建一个下拉列表:

<%= Html.DropDownListFor(n => n.MyColorId, 
                         new SelectList(Colors, "ColorId", "Name")) %>
于 2010-06-16T23:35:44.957 回答
67
<%: 
     Html.DropDownListFor(
           model => model.Color, 
           new SelectList(
                  new List<Object>{ 
                       new { value = 0 , text = "Red"  },
                       new { value = 1 , text = "Blue" },
                       new { value = 2 , text = "Green"}
                    },
                  "value",
                  "text",
                   Model.Color
           )
        )
%>

或者你可以不写类,直接把这样的东西放到视图中。

于 2010-10-03T03:59:04.530 回答
38

从模型中的字典开始避免大量的脂肪指法

namespace EzPL8.Models
{
    public class MyEggs
    {
        public Dictionary<int, string> Egg { get; set; }

        public MyEggs()
        {
            Egg = new Dictionary<int, string>()
            {
                { 0, "No Preference"},
                { 1, "I hate eggs"},
                { 2, "Over Easy"},
                { 3, "Sunny Side Up"},
                { 4, "Scrambled"},
                { 5, "Hard Boiled"},
                { 6, "Eggs Benedict"}
            };

    }


    }

在视图中将其转换为列表以显示

@Html.DropDownListFor(m => m.Egg.Keys,
                         new SelectList(
                             Model.Egg, 
                             "Key", 
                             "Value"))
于 2012-05-01T02:53:10.500 回答
33

嗨,这是我在一个项目中的做法:

     @Html.DropDownListFor(model => model.MyOption,                
                  new List<SelectListItem> { 
                       new SelectListItem { Value = "0" , Text = "Option A" },
                       new SelectListItem { Value = "1" , Text = "Option B" },
                       new SelectListItem { Value = "2" , Text = "Option C" }
                    },
                  new { @class="myselect"})

我希望它可以帮助某人。谢谢

于 2014-03-14T15:00:10.110 回答
12

或者,如果它来自数据库上下文,您可以使用

@Html.DropDownListFor(model => model.MyOption, db.MyOptions.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }))
于 2014-05-10T19:53:20.377 回答
7

使用“请选择一项”

@Html.DropDownListFor(model => model.ContentManagement_Send_Section,
  new List<SelectListItem> { new SelectListItem { Value = "0", Text = "Plese Select one Item" } }
    .Concat(db.NameOfPaperSections.Select(x => new SelectListItem { Text = x.NameOfPaperSection, Value = x.PaperSectionID.ToString() })),
  new { @class = "myselect" })  

源自代码:Master Programmer && Joel Wahlund
王参考:https: //stackoverflow.com/a/1528193/1395101 JaredPar

感谢主程序员&& Joel Wahlund && JaredPar ;

祝朋友好运。

于 2014-06-08T22:44:31.290 回答
4
@using (Html.BeginForm()) {
    <p>Do you like pizza?
        @Html.DropDownListFor(x => x.likesPizza, new[] {
            new SelectListItem() {Text = "Yes", Value = bool.TrueString},
            new SelectListItem() {Text = "No", Value = bool.FalseString}
        }, "Choose an option") 
    </p>
    <input type = "submit" value = "Submit my answer" />
} 

我认为这个答案类似于 Berat 的答案,因为您将 DropDownList 的所有代码直接放在视图中。但我认为这是创建 ay/n (boolean) 下拉列表的有效方法,所以我想分享它。

给初学者的一些注意事项:

  • 不用担心 'x' 被称为什么 - 它是第一次在这里创建,并且不会链接到 MVC 应用程序中其他任何地方的任何东西,所以你可以随意调用它 - 'x', '模型','m'等
  • 用户将在下拉列表中看到的占位符是“选择一个选项”,因此您可以根据需要进行更改。
  • 下拉菜单前面有一段文字,上面写着“你喜欢披萨吗?”
  • 我认为这应该是表单的完整文本,包括提交按钮

希望这可以帮助某人,

于 2018-09-16T15:19:46.270 回答