我想使用下拉列表,问题是所选项目始终是添加的第一个项目。并且完全忽略控制器中设置的选定属性。
也许我错过了一些基本的东西,但我没有在代码中看到任何错误。
我可以看到生成的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>
答案 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