DropDownList项的值

时间:2011-12-07 15:23:11

标签: asp.net-mvc-3

我有以下代码

@Html.DropDownList("optionsforuser", new SelectList(new[] { "Option1", "Option2", "Option3" }), "Select")

无论如何,在SelectList中为Option1初始化值100,为选项2初始化200,为Option3等初始化250吗?

4 个答案:

答案 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);

那些其他解决方案也会起作用,我认为在你的视图中初始化你的下拉列表并不是很“干净”。但它可能是一个品味问题