MVC DropDownListfor()基础知识

Som*_*ode 9 .net c# razor asp.net-mvc-4

我有一个由员工信息组成的模型.在我的模型中,有一个名为City的属性,用于定义他所居住的Employee城市.该属性如下所示

    public string City{get;set;}
Run Code Online (Sandbox Code Playgroud)

现在我有一个包含一个表格的视图,该表格将由员工填写以进行注册.我想使用下拉列表来选择城市.我认为以下代码将用于我发现的下拉列表.我的型号名称是Employee.

    @Html.DropDownListFor(m=>m.City,new SelectList())
Run Code Online (Sandbox Code Playgroud)

请告诉我"有没有办法直接在SelectList()方法中为dropdownlist定义选项,如...在html中?"

如果没有,我应该在哪里定义此下拉列表,调用位置和渲染位置.我不知道在哪里定义值?我很困惑,因为这是mvc,我们必须分开关注,我认为我们无法在任何地方定义任何东西?

提前致谢..

Tie*_* T. 12

您至少有两个选择:

1.)向模型添加列表,数组或任何其他集合类型的城市

2.)将SelectList属性添加到模型中

选项1可以是作为一个字符串数组简单的东西,也可以是,比方说,一个IEnumerableCity对象.然后,您需要将此属性转换SelectListItem为视图中的对象集合,作为DropDownList绑定的一部分.

选项2的优点是能够直接绑定到DropDownList,但需要在action方法中构造列表.

然后最终结果是一样的,这只是你想要了解SoC的迂腐问题.

例如(假设您添加了一个名为Cities)的属性:

@Html.DropDownListFor(m=>m.City, Model.Cities.Select(city => new SelectListItem()
{
    Text = city,
    Value = city,
    Selected = city == Model.City
})
Run Code Online (Sandbox Code Playgroud)

编辑:

要回答你的评论,我必须做出一些假设.我假设你有一个名为的模型EmployeeModel.此模型具有属性,City即纯字符串.所以,这是你的模型的一部分,因为我认为它是:

public class EmployeeModel
{
    public string City { get; set; }

    // ... other properties ...
}
Run Code Online (Sandbox Code Playgroud)

因此,如果您需要添加用于绑定到下拉列表的属性,则可以执行以下操作之一:

public class EmployeeModel
{
    public string City { get; set; }

    public IEnumerable<string> Cities { get; set; }

    // ... other properties ...
}
Run Code Online (Sandbox Code Playgroud)

要么

public class EmployeeModel
{
    public string City { get; set; }

    public SelectList Cities { get; set; }

    // ... other properties ...
}
Run Code Online (Sandbox Code Playgroud)

此新属性将包含您允许用户选择的城市列表.

如果选择第一个选项,则从数据存储区加载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);
Run Code Online (Sandbox Code Playgroud)

当然,这假设您有一个帮助方法(GetCities())来从您存储的城市加载您的城市.您的视图将具有以下内容:

@Html.DropDownListFor(m=>m.City, model.Cities)
Run Code Online (Sandbox Code Playgroud)

然后视图引擎使用这些SelectListItem来构建<select>元素及其<option>元素.