DropDownlist或DropDownListFor Html助手之间的区别

这似乎很奇怪,我无法find这两个助手之间的区别的解释,所以我会认为这是明显的,但我错过了。

基本上我正在试图决定哪一个我应该用我的情况下,以下简单的模型:

public class Booking { public int ID { get; set; } public Room Room { get; set; } public DateTime StartTime { get; set; } public DateTime EndTime { get; set; } public ICollection<Equipment> Equipments { get; set; } public string Who { get; set; } } 

我想要显示一个简单的Room DropDownlist来添加和编辑预订logging。

在做了大量的Google之后,似乎我需要一个DropDopwListFor,但不知道为什么以及如何?

以下面两个例子:

 @Html.DropDownListFor( x => x.EquipmentId, new SelectList(Model.Equipments, "Id", "Text") ) 

和:

 @Html.DropDownList( "EquipmentId", new SelectList(Model.Equipments, "Id", "Text") ) 

很明显,在第二个例子中,绑定到下拉列表的属性的名称被硬编码为一个魔术string。 这意味着如果您决定重构模型并重命名此属性,那么您可能正在使用的“工具支持”无法检测到此更改,并自动修改了在潜在许多视图中硬编码的魔术string。 所以你将不得不手动search和replace这个弱types的助手使用。

在第一个例子中,我们使用强types的lambdaexpression式绑定到给定的模型属性,所以如果您决定重构代码,那么工具可以自动将其重命名到任何地方。 此外,如果您决定预编译视图,则会立即得到编译器时间错误,指向需要修复的视图。 在第二个例子中,您(理想情况下)或您网站的用户(最坏的情况)会在访问此特定视图时遇到运行时错误。

强types的帮助器最初是在ASP.NET MVC 2中引入的,上次我使用弱types的帮助器很早以前就在ASP.NET MVC 1应用程序中。

DropDownListFor将通过使用指定的属性自动select所选的值:

 // Will select the item in model.Equipments that matches Model.EquipmentId @Html.DropdownListFor(m => m.EquipmentId, Model.Equipments); 

另一评论:

您的视图模型中没有ICollection<Equipment> Equipments 。 你应该有一个属性返回一个IEnumerable<SelectListItem>

当你想添加一个视图( aspx文件),在这个DropDownListDropDownListFor将在里面,右键单击 – >添加视图,然后select“创build一个强types的视图”,然后在列表中selectBooking类。 之后,添加此页面。

你可以这样写:

 @Html.DropdownListFor(m => m.Equipments , Model.Equipments); 

因为我们将强types视图添加为Booking ,您可以有:

 m => m.ID, m => m.Room, m => m.StartTime 

…等

在你的服务中,你可以有从数据库中获取数据的方法,然后在你的控制器中使用这个服务的方法来将数据从数据库传递到查看。 您可以在控制器中使用ViewData

 ViewData["Equipments"] = new servicename().getdatalistfromdatabase().AsEnumarable(); 

AsEnumarable()放在从数据库中取出的列表的末尾,使其成为IEnumarable

那么在你看来,你也可以有:

 @Html.DropdownList("MyEquipments" , ViewData["Equipments"]); 

ViewData使用的链接: http : //msdn.microsoft.com/en-us/library/dd410596.aspx

我希望能帮到你。

DropdownListFor支持强types,它的名称由lambdaexpression式分配,所以如果有任何错误,它显示编译时错误。

DropdownList不支持这个。