无论选择的属性如何,Dropdownlist始终选择第一个项目(ASP.NET MVC)

时间:2015-10-18 20:32:54

标签: asp.net-mvc

我想使用下拉列表,问题是所选项目始终是添加的第一个项目。并且完全忽略控制器中设置的选定属性。

也许我错过了一些基本的东西,但我没有在代码中看到任何错误。

我可以看到生成的HTML代码也没有显示所选属性。

你们在下面的代码中发现了什么问题吗?

控制器

public ActionResult Index()
        {

            HomeModel model = new HomeModel();
            List<SelectListItem> ddlItems = new List<SelectListItem>();
            SelectListItem Opt1 = new SelectListItem { Text = "Opt1", Value = "1" };
            SelectListItem Opt2 = new SelectListItem { Text = "Opt2", Value = "2", Selected = true };
            ddlItems.Add(Opt1);//The first item added is always the selected one
            ddlItems.Add(Opt2);
            model.DDL = ddlItems;
            return View("Index", model);
        }

模型

  public class HomeModel
    {
        public List<SelectListItem> DDL { get; set; }

    }

查看

@Html.DropDownListFor(m => m.DDL, Model.DDL, new { id = "ddlId"})

生成的HTML

 <select name="DDL" id="DDL">
    <option value="1">Opt1</option>
    <option value="2">Opt2</option>
 </select>

1 个答案:

答案 0 :(得分:1)

您无法将<select>绑定到复杂对象(在您的情况下为List<SelectListItem>)。您的模型需要属性

public class HomeModel
{
    public int SelectedItem { get; set; }
    public List<SelectListItem> DDL { get; set; }
}

,你的方法将是

public ActionResult Index()
{
    HomeModel model = new HomeModel()
    {
       SelectedItem = 2, // set the default selection
       DDL = new List<SelectListItem>
       {
           new SelectListItem { Text = "Opt1", Value = "1" },
           new SelectListItem { Text = "Opt2", Value = "2" }
       }
    };
    return View(model); // no need for the view name
}

请注意,绑定到模型时,Selected的{​​{1}}属性没有任何意义(它是确定所选内容的属性的值)

然后你的观点将是

SelectListItem