您至少有两种选择:
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/library/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>
元素。
值从哪里来?它应该是数据库表中的外键,硬编码的值,还有其他的东西吗? – 2013-03-04 05:43:07
http://stackoverflow.com/questions/10484774/dropdown-in-mvc – 2013-03-04 05:45:04