【发布时间】:2010-06-16 23:21:03
【问题描述】:
在 ASP.NET MVC 2 中,我想编写一个非常简单的下拉列表,它提供静态选项。例如,我想提供“红色”、“蓝色”和“绿色”之间的选择。
【问题讨论】:
标签: c# asp.net asp.net-mvc-2 html.dropdownlistfor
在 ASP.NET MVC 2 中,我想编写一个非常简单的下拉列表,它提供静态选项。例如,我想提供“红色”、“蓝色”和“绿色”之间的选择。
【问题讨论】:
标签: c# asp.net asp.net-mvc-2 html.dropdownlistfor
请参阅 this MSDN article 和 example usage here on 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")) %>
【讨论】:
<%:
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
)
)
%>
或者你可以不写类,直接把这样的东西放到视图中。
【讨论】:
从模型中的字典开始避免大量的指法
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"))
【讨论】:
您好,这是我在一个项目中的做法:
@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"})
我希望它可以帮助某人。谢谢
【讨论】:
或者,如果它来自数据库上下文,您可以使用
@Html.DropDownListFor(model => model.MyOption, db.MyOptions.Select(x => new SelectListItem { Text = x.Name, Value = x.Id.ToString() }))
【讨论】:
n 次,那就是 n 调用数据库以获取您已输入查询以获取选项的每个下拉列表。现在,如果我们将其抽象为 ViewModel,我们可以将其减少到 1 个数据库调用,无论我们想要多少视图。这是在数据源发生变化时不必遍历所有视图的明显可维护性优势之前。 “.net 开发人员非常害怕数据库”——什么?
使用“请选择一项”
@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/1395101JaredPar;
感谢 Master Programmer && Joel Wahlund && JaredPar ;
祝朋友们好运。
【讨论】:
@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 的所有代码直接放在视图中。但我认为这是创建 y/n(布尔值)下拉列表的有效方法,所以我想分享它。
给初学者的一些注意事项:
希望这对某人有所帮助,
【讨论】: