我有以下代码
@Html.DropDownList("optionsforuser", new SelectList(new[] { "Option1", "Option2", "Option3" }), "Select")
无论如何,在SelectList中为Option1初始化值100,为选项2初始化200,为Option3等初始化250吗?
答案 0 :(得分:5)
尝试使用此扩展程序:
@Html.DropDownList("optionsforuser",
new SelectList(new Dictionary<string, int>
{
{"Option1", 100},
{"Option2", 200},
{"Option3", 250}
},
"Value", "Key")
)
并将Dictionary<string, int>
传递给dataValueField,并使用您的值和文本填充dataTextField
SelectExtensions.DropDownList Method (HtmlHelper, String, IEnumerable(Of SelectListItem))
public static MvcHtmlString DropDownList(
this HtmlHelper htmlHelper,
string name,
IEnumerable<SelectListItem> selectList
)
SelectList Constructor (IEnumerable, String, String)
public SelectList(
IEnumerable items,
string dataValueField,
string dataTextField
)
答案 1 :(得分:1)
对于我只想硬编码选择列表项的情况(即不从某些预定义的集合中获取它们),我使用这个方便的小类:
public class BetterSelectList : List<SelectListItem>
{
public void Add(string text, object value, bool selected = false) {
this.Add(new SelectListItem {
Text = text,
Value = value.ToString(),
Selected = selected
});
}
}
为什么“更好”?它实现了IEnumerable
并且有一个多参数Add
方法,这是C#编译器允许您使用dictionary-style initializers所需的全部,从而实现最无噪声的初始化:
var optionsForUser = new BetterSelectList {
{ "Option1", 100, true },
{ "Option2", 200 },
{ "Option3", 250 }
};
答案 2 :(得分:0)
是的,您设置了文字和值
var selections = new List<SelectListItem>();
selections.Add(new SelectListItem() { Text = "Option1", Value = "100" });
selections.Add(new SelectListItem() { Text = "Option2", Value ="200" });
以下是有关选择列表的MSDN文章:select list
答案 3 :(得分:0)
你可以在你的视图中像其他人发布的那样进行,但你不能在控制器中这样做吗?
例如,在您的视图中模型:
public class ViewModel()
{
public List<SelectListItem> OptionsForUser{ get; set; }
}
在控制器:
中var optionsForUser = new List<SelectListItem>();
optionsForUser.Add(new SelectListItem { Text = "Option1", Value = "100"});
optionsForUser.Add(new SelectListItem { Text = "Option2", Value = "200"});
optionsForUser.Add(new SelectListItem { Text = "Option3", Value = "250"});
var viewmodel = new ViewModel();
viewmodel.OptionsForUser = optionsForUser;
return view(viewmodel);
然后在视图:
中@Html.DropDownList("optionsforuser", Model.OptionsForUser);
那些其他解决方案也会起作用,我认为在你的视图中初始化你的下拉列表并不是很“干净”。但它可能是一个品味问题