MVC DropDownListFor ViewData被选中的项目

本文关键字:项目 DropDownListFor ViewData MVC | 更新日期: 2023-09-27 18:02:16

我试图让下拉列表的选定值默认为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"])

MVC DropDownListFor ViewData被选中的项目

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

所以你应该检查你在Controller中为这个模型属性设置了正确的值

使用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,但您可以更改它。

祝你好运!