MVC DropDownListfor() Basics

本文关键字:Basics DropDownListfor MVC | 更新日期: 2023-09-27 18:01:56

我有一个由雇员信息组成的模型。在我的模型中,有一个名为City的属性,它定义了雇员居住的城市。属性如下

所示
    public string City{get;set;}

现在我有一个视图,其中包含一个将由员工填写注册的表单。我想使用下拉列表来选择城市。我认为下面的代码将用于下拉,因为我发现。我的模型名是Employee。

    @Html.DropDownListFor(m=>m.City,new SelectList())

请告诉我"有什么方法可以直接在SelectList()方法中定义下拉列表的选项吗?在html ?"

如果没有,我应该在哪里为这个下拉定义类,在哪里调用和在哪里渲染。我不知道在哪里定义值?我很困惑,因为这是mvc,我们必须分开关注,我认为我们不能在任何地方定义任何东西?

Thanks in advance.

MVC DropDownListfor() Basics

您至少有两个选择:

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

2)。给你的模型添加一个SelectList属性

选项1可以是简单的字符串数组,也可以是City对象中的IEnumerable。然后,您需要将此属性转换为视图中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
})
编辑:

为了回答你的评论,我必须做一些假设。我假设您有一个名为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来构建<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)

你可以很好地缓存城市,它将数据和UI工作从你的模型中保存出来。

如果您想了解更多关于创建自己的帮助程序的信息,我建议您参考[阅读].1