MVC DropDownListfor()基础知识(MVC DropDownListfor() Ba

2019-08-17 07:20发布

我有包括员工信息的模型。 在我的模型有一个属性叫做城市它定义在他所居住的城市职工。 的属性格式如下所示

    public string City{get;set;}

现在我有一个包含将由一个员工登记填写的表单视图。 我想用一个下拉列表来选择城市。 我想下面的代码将被用于下拉,因为我发现。 我的型号名称是员工。

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

请告诉我说:“有没有办法来定义一样,直接...在HTML的下拉列表中的SelectList()方法的选项?”

如果不是这样,我应该在哪里定义的类此下拉,在那里打电话,哪里render.I不知道哪里来定义价值? 我很困惑,因为这是MVC和我们有单独的关注,我认为我们不能在任何地方定义什么?

提前致谢..

Answer 1:

您至少有两种选择:

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

2)一个的SelectList属性添加到模型

选项1可以作为一个字符串数组这样简单的事情,还是可以的,比如说,一个IEnumerableCity对象。 这样,你会需要这个属性转化为集合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>元素。



Answer 2:

你可以在你的模型都这样了,它很快取得,虽然我不会推荐它:

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



文章来源: MVC DropDownListfor() Basics