我有包括员工信息的模型。 在我的模型有一个属性叫做城市它定义在他所居住的城市职工。 的属性格式如下所示
public string City{get;set;}
现在我有一个包含将由一个员工登记填写的表单视图。 我想用一个下拉列表来选择城市。 我想下面的代码将被用于下拉,因为我发现。 我的型号名称是员工。
@Html.DropDownListFor(m=>m.City,new SelectList())
请告诉我说:“有没有办法来定义一样,直接...在HTML的下拉列表中的SelectList()方法的选项?”
如果不是这样,我应该在哪里定义的类此下拉,在那里打电话,哪里render.I不知道哪里来定义价值? 我很困惑,因为这是MVC和我们有单独的关注,我认为我们不能在任何地方定义什么?
提前致谢..
您至少有两种选择:
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-我们/库/ 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>
元素。
你可以在你的模型都这样了,它很快取得,虽然我不会推荐它:
public class Place
{
public string City{get;set;}
public SelectListItem[] Cities()
{
return new SelectListItem[2] { new SelectListItem() { Text = "London" }, new SelectListItem() { Text = "New York" } };
}
}
...和你的看法
@Html.DropDownListFor(m => m.City, Model.Cities())
我认为最好的地方是这样的(但稍微复杂一些)是你自己htmlhelper
和使用情况可能看起来是这样的:
@html.CityDropDownFor(m => m.City)
你可以很好地缓存城市和它保持数据和用户界面的工作,你的模型。
如果您想了解更多有关创建自己的助手,我建议一个位的[阅读起来。 1