你至少有两个选择:
1.) 将列表、数组或任何其他类型的城市集合添加到您的模型中
2.) 将 SelectList 属性添加到您的模型
选项 1 可以是一个简单的字符串数组,或者可以是一个IEnumerable
对象City
。然后,您需要将此属性转换为SelectListItem
视图中的对象集合作为DropDownList
绑定的一部分。
选项 2 的优点是能够直接绑定到DropDownList
,但要求您在操作方法中构造列表。
那么最终结果是一样的,这只是你想对 SoC 有多迂腐的问题。
例如(假设您添加了一个名为 的属性Cities
):
@Html.DropDownListFor(m=>m.City, Model.Cities.Select(city => new SelectListItem()
{
Text = city,
Value = city,
Selected = city == Model.City
})
编辑:
要回答您的评论,我必须做出一些假设。我假设您有一个名为EmployeeModel
. 该模型有一个属性,City
即纯字符串。所以,这是你的模型的一部分,我认为它是:
public class EmployeeModel
{
public string City { get; set; }
// ... other properties ...
}
因此,如果您需要添加一个属性以绑定到您的下拉列表,您可以执行以下操作之一:
public class EmployeeModel
{
public string City { get; set; }
public IEnumerable<string> Cities { get; set; }
// ... other properties ...
}
或者
public class EmployeeModel
{
public string City { get; set; }
public SelectList Cities { get; set; }
// ... other properties ...
}
这个新属性将包含您允许用户从中选择的城市列表。
如果选择第一个选项,则从数据存储中加载 IEnumerable,然后在视图中使用上面的第一个示例,该示例使用 LINQ 将Cities
属性中的每个字符串投影到新SelectListItem
对象中。
如果您使用第二个选项,SelectList
则在将模型传递给视图之前在操作中构建一个。这并不是很困难,因为该类提供了一个构造函数,它接受一个IEnumerable
(您的城市列表)和“选定值”,这将是City
属性(参见http://msdn.microsoft.com/en-us/库/dd460123%28v=vs.108%29.aspx)。您的代码将类似于:
model.Cities = new SelectList(GetCities(), model.City);
当然,这假设您有一个辅助方法 ( GetCities()
) 可以从存储城市的任何地方加载它们。然后你的视图会是这样的:
@Html.DropDownListFor(m=>m.City, model.Cities)
视图引擎然后使用这些SelectListItem
s 来构建<select>
元素及其<option>
元素。