Controller 基类公开了一个ViewData 字典属性,用来从Controllers 传递额外的数据给Views 视图。
例如,为了实现将Edit 视图中Country 国家的文本框改为下拉列表框,我们更新Edit() Action 方法,传
入一个SelectList 对象(除了Dinner 对象外),该对象将作为Country 下拉列表框的Model 类。
// GET: /Dinners/Edit/5
[Authorize]
public ActionResult Edit(int id) {
Dinner dinner = dinnerRepository.GetDinner(id);
ViewData["Countries"] = new SelectList(PhoneValidator.AllCountries, dinner.Country);//PhoneValidator.AllCountries,是封装好的一个可枚举的属性,其中包括了国家信息。
return View(dinner);
}
上述SelectList 构造函数接收2 个参数,第一个是国家列表,添加下拉列表,第二个是当前选择的值。
下面更新Edit.aspx 视图模板,使用Html.DropDownList() 辅助方法代码Html.TextBox() 辅助方法:
<%= Html.DropDownList("Country", ViewData["Countries"] as SelectList) %>
上述Html.DropDownList() 辅助方法接收2 个参数,第一个是输出的HTML 表单元素的名称,第二个是通
过ViewData 字典传入的SelectList 模型类,必备那个使用C#的关键字as 转换dictionary 为SelectList。
现在我们在浏览器中访问/Dinners/Edit/2,发现Edit 视图模板中Country 国家文本框已经更新为下拉列表
框了。
摘自《一步一步学mvc》