强类型数据控件(ASP.NET vNext系列)
[原文发表地址] Strongly Typed Data Controls (ASP.NET vNext Series)
[原文发表时间] 2011-09-05 21:58
这是我的ASP.NET vNext系列博客的第二篇。
.NET和Visual Studio的vNext版本囊括了许多很棒的新特性和功能。有了ASP.NET vNext你会发现许多Web Form和MVC的很棒的优化,而且ASP.NET作为两者基础的核心,也会有很多进步。
这篇博文是我第一篇关于Web Form的优化讨论。在下面的内容中我会介绍新支持的强制输入数据控件。
数据控件模板背景
ASP.NET Web Form从第一个版本开始就介绍了“模板”的概念。模板能够让你自定义(或者重写)服务器控件中发出的标记,通常与数据绑定表达式一起使用。
当使用模板中的数据连接,你用late-bound表达来绑定数据。比如,下面我们用Eval()辅助函数来进行“FirstName”和“LastName”两个属性的数据绑定,从对象数据连接列表到复述控件:
<ul>
<asp:Repeaterrunat="server" ID="customers">
<ItemTemplate>
<li>
First Name: <%# Eval("FirstName")%><br/>
Last Name: <%# Eval("LastName")%><br/>
</li>
</ItemTemplate>
</asp:Repeater>
</ul>
在进行双向数据绑定时,你会使用Bind()辅助函数,如下所示:
<asp:FormView ID="editCustomer" runat="server" >
<EditItemTemplate>
<div>
First Name:
<asp:TextBoxID="firstName"runat="server"Text='<%# Bind("FirstName") %>'/>
</div>
<div>
Last Name:
<asp:TextBoxID="lastName"runat="server"Text='<%# Bind("LastName") %>'/>
</div>
<asp:Buttonrunat="server"CommandName="Update" />
</EditItemTemplate>
</asp:FormView>
上述方法的一个缺点就是调用Eval()和Bind()是late-bound,这就意味着你要输入字符串来显示属性名称。你不能智能感应成员名称,不支持代码导航(比如转到定义),也不支持编译时检查。
强类型数据控件
下一版ASP.NET提供了启用强制输入数据模板的能力。具体来说,我们新增了声明功能,通过数据控件新属性“ModelType”来显示将会绑定到什么类型的数据。设置这个属性会引出两个新类型的变量,在数据绑定模板表达范围内生成,那就是Item和BindItem。
开发者可以在数据连接表达中运用这些变量,获取完全智能感应以及编译时检测支持。比如,下面我们在<asp:repeater>控件上设置ModelType,作为“Customer”对象。设置完成之后,我们就能从使用Eval(“FirstName”)替换Item.FirstName来转换成引用属性。
我们同时会获取完全的Visual Studio代码智能感应:
对双向数据绑定表达式来说,我们也可以使用BindItem变量,得到相同的强壮输入益处:
<asp:FormView ID="editCustomer" runat="server">
<EditItemTemplate>
<div>
First Name:
<asp:TextBoxID="firstName" Text='<%# BindItem.FirstName %>'runat="server" />
</div>
<div>
Last Name:
<asp:TextBoxID="lastName" Text='<%# BindItem.LastName %>'runat="server" />
</div>
<asp:Buttonrunat="server"CommandName="Update" />
</EditItemTemplate>
</asp:FormView>
要是我们在输入时出错了,我们会从智能感应引擎中获取即时反馈知道哪里出错了:
新功能快速视频
Damian Edwards制作了一个90 秒视频,展示了在实际运用中使用强制输入数据控件,你可以点击此处观看。
总结
对强类型数据控件的支持也许是一个很小的,但却是很精致的一个功能,使得数据绑定表达更简单清晰。在今后的博文中我还会陆续介绍一些我们在ASP.NET vNExt中对Web Form做的一些其他数据改进,让数据编辑和数据连接更加强大简单。
希望对你们有帮助。
Scott