MVC DropDownListFor ViewData选定项

时间:2015-07-12 20:02:50

标签: c# asp.net-mvc asp.net-mvc-4

我试图将下拉列表的选定值默认为3600,如果值为0.不幸的是,下拉默认为第一个选项。我相信选择失败,因为列表中没有任何内容匹配0.这是我的代码:

控制器方法:

    public void GetTaskInterval(JMASettings model)
    {
        IList<SelectListItem> ilSelectList = new List<SelectListItem>();
        Dictionary<string, string> secondsDictionary = new Dictionary<string, string>();
        secondsDictionary.Add("Every Thirty Minutes", "1800");
        secondsDictionary.Add("Every Hour", "3600");
        secondsDictionary.Add("Every Three Hours", "10800");
        secondsDictionary.Add("Every Day", "86400");

        foreach (KeyValuePair<string, string> pair in secondsDictionary)
        {
            SelectListItem item = new SelectListItem();
            item.Text = pair.Key;
            item.Value = pair.Value;

            if (model.TaskInterval == 0 && item.Value.ToString() == "3600")
                item.Selected = true;

            if (item.Value == model.TaskInterval.ToString())
                item.Selected = true;

            ilSelectList.Add(item);
        }

        ViewData["TaskInterval"] = ilSelectList;
    }

.cshtml

@Html.DropDownListFor(model => model.JMASettings.TaskInterval, (IEnumerable<SelectListItem>)ViewData["TaskInterval"])

2 个答案:

答案 0 :(得分:1)

如果您想使用DropDownListFor()帮助器设置默认值,您应该了解它是您的情况下第一个参数model.JMASettings.TaskInterval的尊重值。

因此,您应该检查是否在Controller

中为此模型属性添加了正确的值

答案 1 :(得分:1)

使用SelectList并将IEnumerable<SelectListItem>放入其中:

        Dictionary<string, string> secondsDictionary = new Dictionary<string, string>();
        secondsDictionary.Add("Every Thirty Minutes", "1800");
        secondsDictionary.Add("Every Hour", "3600");
        secondsDictionary.Add("Every Three Hours", "10800");
        secondsDictionary.Add("Every Day", "86400");

var itemlist = new SelectList(secondsDictionary, "Key" , "Value", 3600);

并在您看来:

@Html.DropDownListFor(model => model.JMASettings.TaskInterval, itemlist , "Select one")

默认值已设置为3600,但您可以更改它。

上帝运气!:)