我正在观看有关DropDown https://www.youtube.com/watch?v=79aYSOcmpV8
的HtmlHelper
的教程
大约8分钟,他正在读取数据库以替换一些硬编码值。
要从控制器传递部门列表,请将它们存储在" ViewBag"
public ActionResult Index()
{
// Connect to the database
SampleDBContext db = new SampleDBContext();
// Retrieve departments, and build SelectList
ViewBag.Departments = new SelectList(db.Departments, "Id", "Name");
return View();
}
最后一步。
现在进入"索引"查看,访问部门列表来自" ViewBag"
@Html.DropDownList("Departments", "Select Department")
我在视图中看不到强类型模型。
Helper
知道Departments
如何引用ViewBag中的值?答案 0 :(得分:2)
向ViewBag
添加值时,在生成视图时,它还会添加到ViewData
的{{1}}属性中。您使用的ViewContext
重载相当于在
DropDownList()
SelectList
null
在这种情况下,在内部,帮助程序搜索@Html.DropDownList("Departments", null, "Select Department")
属性以查找匹配的密钥,该密钥是ViewData
(IEnumerable<SelectListItem>
是)。您可以在source code
"Departments"
方法中查看相关代码
private static MvcHtmlString SelectInternal()
请注意,本教程中的示例是一种糟糕的方法,使用“魔术”字符串并要求您使用// If we got a null selectList, try to use ViewData to get the list of items.
if (selectList == null)
{
selectList = htmlHelper.GetSelectData(name);
....
}
访问POST方法中的值。更好的方法是使用视图模型并强烈绑定到视图模型,例如
Request.Form["Departments"]
并且GET方法将是
public class MyViewModel
{
public int SelectedDepartment { get; set; }
public IEnumerable<SelectListItem> DepartmentList { get; set; }
...
}
并在视图中
public ActionResult Create()
{
MyViewModel model = new MyViewModel
{
DepartmentList = new SelectList(db.Departments, "Id", "Name");
};
return View(model);
}
并将表单发回
@model MyViewModel
....
@Html.DropDownListFor(m => m.SelectedDepartment, Model.DepartmentList, "Select Department")