快速业务通道

领先技术: 子类化和重写ASP.NET页面 - 第II部分

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-07-03
全新的 TextBox 控件。这个全新的控件可确保任何分配给 Text 属性的超过最大长度的文本都能被检测到并得以删除。您会在 ASP.NET 页中使用此控件吗?只需向每个页面注册该控件并替换出现的所有原始文本框即可。

在 ASP.NET 2.0 中,将以下配置脚本添加到 <pages> 块的 <controls> 节下的 web.config 文件中,这样您可以节省不少时间。

<add tagPrefix=”x” namespace=”Samples” assembly=”TextBox” />

这段脚本保证 web.config 文件控制的所有页面均可自动注册指定的标记和控件。

但目前仍存在一个问题,而且是个很大的问题。那就是如何在新旧文本框之间切换?幸运的是,ASP.NET 2.0 中的配置文件内提供了一个 <tagMapping> 节:

<pages>
<tagMapping>
<add tagType=”System.Web.UI.WebControls.TextBox”
mappedTagType=”Dino.Samples.TextBox” />
</tagMapping>
</pages>

<tagMapping> 节允许您在编译时将一种控件类型重新映射到另一种控件类型。通过这种重新映射,我们使用被映射的类型替代了受配置文件控制的全部页面和用户控件的原始类型根据前面给出的代码,任何引用了系统 TextBox 的地方均将使用 Dino.Samples.TextBox。您要做的只是编写新控件并编辑 web.config 文件。这种简单的做法是不是有些不可思议?但确实是非常有效的。

毫无疑问,重新映射的类型必须为继承自原始类型的类。还要指出的是,ASP.NET 团队在 ASP.NET AJAX Extensions 1.0 的 pre-RTM build 中使用了此功能,以便使用可与 UpdatePanel 控件很好兼容的新验证程序控件来替换原始控件。

最终的解决方案

客户最终正确地诊断出 ASP.NET TextBox 控件及其处理已发布数据的方式存在问题。他们通过创建新的 TextBox 控件令人满意地修复了问题。由于开发人员之前并不了解有更好的方法或通过声明的方式来替换整个站点的控件,因此他们手动替换了所有出现的控件,并将其打包放入一个用户控件中。这样做是为了尽量降低将来的更改可能造成的影响。

有了 tagMapping 功能,找到解决方案简直易如反掌。使用 tagMapping 这一技巧比较灵活,可以用来替换错误的控件或者为现有控件添加新功能。但是请注意,如果重新映射的控件具有了新的属性或方法,您需要修改源代码才能使用这些新属性和方法。

(提到以声明的方式进行映射,ASP.NET 2.0 还具有一个特性,即包含 <urlMappings> 节。它是 <configuration> 的直接子级。<urlMappings> 节在 ASP.NET 2.0 中是声明性的,它对应的是 HttpContext 对象上的 RewritePath 方法。)

总之,您要注意,在设置了 MaxLength 之后,原始 ASP.NET TextBox 控件将无法对 Text 属性的任何发布值进行裁剪。但本专栏通过修改控件解决了这一限制,应该对您解决这一问题有所帮助。您可以在 web.config 文件中新加一行简单的代码,通过声明的方式将其插入应用程序。

将您向 Dino 提出的问题和意见发送至:cutting@microsoft.com cutting@microsoft.com.

代码下载位置:http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/CuttingEdge2007_05.exe

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号