ExtAspNet秘密花园(四) — 每个页面需要一个PageManager

本篇博客详细解析了使用ExtAspNet控件时页面级别的参数配置及其对表单、AJAX加载和页面布局的影响,并通过示例展示了如何在页面回发时利用ExtAspNet与ASP.NET控件进行交互,特别是针对Label和Literal控件的不同行为进行了深入分析。
 

每一个使用ExtAspNet控件的页面都必须包含一个PageManager控件,我们可以把PageManager控件看做页面级别的参数配置(相对于Web.config站点级别的参数配置)。

 

页面级别的参数配置

 

  • Theme: 控件主题,目前支持三种主题风格(blue/gray/access,默认值:blue)
  • Language: 控件语言(en/zh_CN/zh_TW/...,默认值:zh_CN)
  • FormMessageTarget: 表单字段错误提示信息的显示位置(side/qtip,默认值:side)
  • FormOffsetRight: 表单字段右侧距离边界的宽度(默认值:20px)
  • FormLabelWidth: 表单字段标签的宽度(默认值:100px)
  • FormLabelSeparator: 表单字段标签与内容的分隔符(默认值:":")
  • EnableAjax: 是否启用AJAX(默认值:true)
  • AjaxTimeout: AJAX超时时间(单位:秒,默认值:60s)
  • EnableBigFont: 是否启用大字体,将ExtJS默认11px的字体全部改为12px,否则显示的中文字体太小(默认值:false)

上面这些参数和Web.config中的一样,只不过作用域在页面范围内,覆盖Web.config中的同名配置。

 

还有一些其他配置属性:

  1. EnablePageLoading:是否启用页面第一次加载提示,默认为居中显示的加载图标(默认值:true)
  2. EnableAjaxLoading:是否启用AJAX加载提示,默认为位于页面上方的文字提示(默认值:true)
  3. ExecuteOnReadyWhenPostBack:是否在每次页面回发时都执行onReady脚本(默认值:true)

虽然ExtAspNet希望开发人员尽可能少地编写JavaScript脚本,但有时恰到好处的脚本可以起到事半功倍的效果,比如示例站点就引入了一个外部的default.js来处理用户点击左侧菜单的事件和地址栏#之后的片段:

   1:  <html>
   2:  <body>
   3:      <form>
   4:      </form>
   5:      <script src="./js/default.js" type="text/javascript"></script>
   6:  </body>
   7:  </html>

而default.js中的所有代码都放在一个 functiononReady() {}

的函数体中。

 

太棒了太棒了太棒了

这其实是ExtAspNet的一个约定,ExtAspNet会在ExtJS以及自身的脚本执行完毕后,查找是否存在onReady函数,如果存在就执行此函数。你可以启用Web.config中的DebugMode,观察生成的页面源代码,在最后你会看到这样的脚本:

image

 

 

占据整个页面的面板 - AutoSizePanelID属性

这是一个你一定不会错过的属性,如果希望某个Panel、Window、Tree、TabStrip、RegionPanel或者Form占据整个页面空间,就需要用到这个属性,还是看看示例站点的写法:

 

image

 

 

让ASP.NET控件也参与ExtAspNet的AJAX回发 - AjaxAspnetControls属性

 

我们曾在第一篇文章提到,ExtAspNet的一个设计理念是“用心实现80%的功能”,也就是说肯定会遇到一些ExtAspNet提供的控件无法完成的任务,怎么办?我们只好求助于ASP.NET控件,并且ExtAspNet提供了一种优雅的方式让ASP.NET控件也可以参与AJAX回发过程,这就是AjaxAspnetControls属性。

 

如果想让某个ASP.NET在页面回发时也更新,可以将其ID放在AjaxAspnetControls属性中,多个控件ID以逗号分隔,具体用法请参见示例页面

 

太棒了太棒了太棒了

那么,ExtAspNet是怎么做到这一点的呢?

道理其实很简单,ExtAspNet会在AJAX响应时查找生成的HTML片段中的那些ASP.NET控件,拿到ASP.NET生成的HTML并生成更新脚本,如果你用Firebug等调试工具查看一下AJAX请求,能够很清楚的看到如下交互过程:

image

image

 

 

太棒了太棒了太棒了太棒了太棒了

如果你能理解上面提到的ExtAspNet的工作原理,可以尝试一下这个示例。这个示例主要是考察ASP.NET控件Label和Literal在ExtAspNet的AJAX交互过程中的区别,先来看看代码:

   1:  <ext:PageManager ID="PageManager1" AjaxAspnetControls="Label1,Literal1" runat="server" />
   2:  <asp:Label ID="Label1" Text="Label1" runat="server"></asp:Label>
   3:  <br />
   4:  <asp:Literal ID="Literal1" Text="Literal1" runat="server"></asp:Literal>
   5:  <br />
   6:  <ext:Button ID="Button1" runat="server" Text="更新上面几个文本值" OnClick="Button1_Click">
   7:  </ext:Button>
   1:  protected void Button1_Click(object sender, EventArgs e)
   2:  {
   3:      Label1.Text = "Label1 - " + DateTime.Now.ToLongTimeString();
   4:      Literal1.Text = "Literal1 - " + DateTime.Now.ToLongTimeString();
   5:  }

 

如果只看这段代码,我们可能会想当然地以为asp:Label和asp:Literal在点击按钮时都被更新了,实际情况却不是这样:

image

为什么只有Label1的值得到更新,而Literal1没有得到更新,看看生成的HTML源代码,再想想ExtAspNet的内部处理过程,你不难发现其中的奥秘。

生成的HTML源代码:

   1:  <span id="Label1">Label1</span>
   2:  <br />
   3:   Literal1
   4:  <br />
   5:  <div id="Button1_wrapper"></div>

原来asp:Label和asp:Literal生成的HTML代码的格式是不同的,asp:Literal生成的HTML代码没有外部的<span>标签,怪不得ExtAspNet不能通过ID值来查找Literal并更新它的HTML值,那么该怎么呢?

对于这种特殊情况,ExtAspNet没有打算费劲周折来弥补这种缺陷,而是提供了一个简单的解决办法:

image

是不是很好玩……

 

 

小结

每个页面都需要一个PageManager控件,它提供了页面级别的参数配置,可以用来覆盖Web.config中的配置。不过最常到的可能是AutoSizePanelID属性,用来将面板扩展到整个页面。

 

 

下一篇文章我们会介绍最常用到的Button控件,ExtAspNet为Button提供了非常丰富的功能。

 

 

 

注:本系列文章由三生石上原创,博客园首发,转载请注明出处。如果你喜欢本系列文章,请一定不要忘记推荐本文或者关注博主

《ExtAspNet秘密花园》系列文章目录

 
由于extaspnet中用的都是ajax机制,所以在extaspnet和aspnet标签混用的时候有两种方式,第一个是用PageManage中的EnableAjax="fasle"关闭ajax,另外一种就是文中所说的将asp的ID放入 AjaxAspnetControls中 特此备用
基于Extjs的开源控件库ExtAspNet中文版 v3.1.9,ExtAspNet - 基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。 ExtAspNet 是为了创建没有 JavaScript,没有 CSS,没有 UpdatePanel,没有 ViewState,没有 WebServices 的网站应用程序。 支持的浏览器: IE 7.0+、Firefox 3.6+、Chrome 3.0+、Opera 10.5+、Safari 3.0+ 授权协议:Apache License 2.0 (Apache) ExtAspNet 是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果。目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 注:ExtAspNet 基于一些开源程序,比如ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor. +2012-08-18 v3.1.9 -修正other/addtab.aspx示例的JS错误和BoundField使用Tooltip的错误(Dennis_Liu)。 +修正Window的GetShowReference返回的字符串中包含双引号的问题(︶ㄣ東東ㄣ、天蓝若空、李剑飞、克儿~)。 -虽然返回的JavaScript语句没问题,但是如果放到HTML属性中就有问题了。 -修正HtmlNodeBuilder在处理双引号等字符时可能导致潜在JavaScript问题。 -从根本上解决WindowField、LinkButton、HyperLink等控件的客户端脚本中存在单引号或者双引号时出现的各种问题。 -增加动态创建模板列示例grid/griddynamiccolumns2.aspx(大鸟打小鸟)。 -修正按钮的Type设为Reset无效的问题,注意重置的其实是页面上所有的表单控件(e先生)。 -修正英文下确认对话框标题依然默认中文的问题。 -修正后台对可为空的int,short,double属性赋值时出现的异常(石头鱼)。 +为Window控件增加GetMaximizeReference和GetRestoreReference两个方法。 -变通的实现打开窗体后最大化:PageContext.RegisterStartupScript(Window2.GetShowReference() + Window2.GetMaximizeReference()); -增加英文示例http://demo.extasp.net/en/。 -更新行布局、列布局和锚点布局示例。 -增加表格导出Excel文件示例。 -增加表格模板列使用单选列表、复选列表的示例。 -完善在线文档http://doc.extasp.net/。 -公开ControlBase的ConvertPropertiesToJObject和RecoverPropertiesFromJObject两个方法。 -兼容Asp.Net的用户控件(UserControl)并增加示例(Spring)。 -更新示例框架,增加手风琴控件和树控件的组合菜单(幻之达)。 -修正自动树节点ID的生成规则,防止页面中多个树控件产生的命名冲突。 -修正表格WindowField生成的脚本可能会出现类似x2未定义的错误(梦如人生)。 -应广大网友的要求,表格的BoundField在启用状态并且提示信息为空的情况下去除标签。 -类似于onReady函数,增加对onInit函数的支持,用来在执行页面初始化脚本之前调用。 -优化复选框列表和单选按钮列表,减少生成的代码量。 -修正CheckBoxList和RadioButtonList无法在回发中更新的BUG(破风、吉吉﹑落叶飞尘)。 -修正CheckBoxList和RadioButtonList初始为空时页面不能显示的BUG(e先生、黑眼睛咪咪、宇洋)。 -预祝俺家小师生日快乐!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值