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
文件),在这个DropDownList
或DropDownListFor
将在里面,右键单击 – >添加视图,然后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
不支持这个。
- 使用Twitter Bootstrap在@ html.actionlink中显示html
- ASP.Net哪个用户帐户在IIS 7上运行Web Service?
- 为什么我的ClaimsIdentity总是被authentication为false(对于web api授权filter)?
- 从用户控件调用父页面中的方法
- 无法打开login请求的数据库“testing”。 login失败。 用户'xyz \ ASPNET'login失败
- 通过jQuery调用ASP.NET服务器端的方法
- 在asp.net强制https整个网站的最佳途径?
- 用于密码的正则expression式必须包含至less八个字符,至less一个数字以及大写字母和特殊字符
- 将FormsAuthentication cookie传递给WCF服务