【IT168 技术文档】
本教程结合实例演示NBear.Web提供的Page/MasterPage/UserControl扩展基类。您将看到,使用这些基类能大大提高ASP.NET 2.0网页开发速度,轻松获得Ajax和多语言支持等功能。对应的源码包含在从sf.net下载的zip包中的tutorials\Web_Tutorial目录中。
重要说明
本文讨论的内容只涉及NBear.Web这一个程序集,如果要在您自己的Web项目中使用本文所讨论的功能,只需要添加到NBear.Web.dll的引用。NBear是一个基于.Net Framework 2.0/C# 2.0/ASP.NET 2.0的框架,因此,本文讨论的内容只能用于ASP.NET 2.0开发。
本文只讨论了NBear.Web中由NBear.Web.UI命名空间下的Page/MasterPage/UserControl这组扩展基类中定义的功能,因此,要在网页中使用这些组件的功能,必须将这些类设为您的WebForm页面,MasterPage页面或User Control的基类。
由于为Page,MasterPage和UserControl这三个基类所作的扩展基本上是等价的,所以,本文下面的内容,主要演示对于Page这个基类的扩展功能,对于MasterPage和UserControl使用方法类似,只需保证使MasterPage和UserControl继承相应的基类即可。
Helper Methods
示例代码中的HelperMethodsDemo.aspx页面演示了一组NBear.Web.UI.Page基类的扩展辅助方法。
1) GetIntParam()/GetStringParam()/GetDateTimeParam()。这组方法用于方便地获取从QueryString和Form传递而来的参数。如果网页包含相同键值的Form参数和QueryString参数,则优先返回Form参数。
下面的代码简单的使用这组函数,并输出参数的值:
Response.Write(string.Format("intParam = {0}<br />", GetIntParam("intParam", 0))); Response.Write(string.Format("strParam = {0}<br />", GetStringParam("strParam", string.Empty))); Response.Write(string.Format("dtParam = {0}<br />", GetDateTimeParam("dtParam", DateTime.MinValue)));
注意,这组函数包含两个参数,第二个参数指定默认的错误返回值,如果指定的键值不存在,或类型转换失败,则返回该错误返回值。
2) StrongTyped<IEntityType>()。该方法用于将一个任意类型的对象转换为指定的强类型对象,从而简化形如(ReturnType)obj这样的语法。该方法尤其适合于用于页面的数据绑定表达式中,代替基于反射的eval语法。
下面的示例将一个弱类型的Session值转换为一个强类型的对象:
Session["hello time"] = DateTime.Now; Response.Write(string.Format("Test StrongTyped<T>(), current time ticks = {0}<br />", StrongTyped<DateTime>(Session["hello time"]).Ticks));
3) TextToHtml()/ToXXXString()。这组方法帮助进行常见的字符串转换。执行示例页面可以看到其中两个方法的演示,这里就不列举了。
ClientScriptFactory
可以通过 Page.ClientScriptFactory访问一组用于生成客户端JS脚本的服务端方法,包含了常见的一些JS代码的构造封装。在服务端构造客户端JS的好处可以使得构造客户端脚本的过程获得编译期的错误检测,避免手写JS代码的一些不小心的不那么容易调试的错误。
示例代码中的ClientScriptFactoryDemo.aspx页面演示了使用ClientScriptFactory的两种典型场景。
一种是在aspx页面中直接输出脚本。例如:
<%= ClientScriptFactory.WrapScriptTag(ClientScriptFactory.PopAlert("Page Loaded")) %>
该语句将直接向页面输出一个<script>块,包含一个alert效果。注意,如果不使用WrapScriptTag的话,自然生成的脚本就不会包含在一个script中,当在某一段script块中插入部分JS片段时,不需包含WrapScriptTag。
第二种也是非常常见的使用方法,则是在页面的某个Postback方法执行完毕后,直接在事件处理函数中Response一段脚本,给出一个客户端提示。例如,下面的代码在一个事件处理函数中输出了一段相对复杂的客户端JS脚本:
Response.Write(ClientScriptFactory.WrapScriptTag(string.Format("var result = {0}; if (result) {1} else {2}", ClientScriptFactory.PopConfirm("Are you sure?"), ClientScriptFactory.PopAlert("Yes"), ClientScriptFactory.PopAlert("No")), ClientScriptFactory.PopAlert("Done")));