asp.net如何实现php表单数组?

beckfun 2011-04-04 09:34:22
不知不觉又升了个裤衩,散粉,顺带问个问题(可能过于理想)

在不用GridView等服务器控件以及AJAX的情况下,也就是页面一个table然后通过JS来添加tr tr内的格式固定,输入完信息,提交,接受使用request.from
我看到PHPWIND使用的是页面表单内的name使用的是***[***],也查了相关PHP文档,说是表单数组,

不知道是否有方法把其转成ASP.NET
不知我想法是否太过理想?!
示例

<input name="a[1]" value="1" />
<input name="a[2]" value="2" />
<input name="a[3]" value="3" />

我现在不是要规规矩矩的写三个request.form["a[1]"],request.form["a[2]"],request.form["a[3]"]


如果我想法太过天真太过理想..也不要拍我..权当我散粉帖..哇哈哈..只能发200分帖
...全文
374 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
beckfun 2011-04-07
  • 打赏
  • 举报
回复
在来几层结贴了....
happy664618843 2011-04-06
  • 打赏
  • 举报
回复
Request.Form[]就可以
阿非 2011-04-06
  • 打赏
  • 举报
回复
可以用正则对提交的数据进行处理,来实现PHP的表单数组

刘婷婷 2011-04-06
  • 打赏
  • 举报
回复
你的问题,我一般都用js写的,动态添加tr,接分
porschev 2011-04-06
  • 打赏
  • 举报
回复

把name定义的有规律点。。。

用个循环取值。。
Purple_Sky2010 2011-04-06
  • 打赏
  • 举报
回复
规规矩矩接分
jeven_xiao 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dalmeeme 的回复:]
名字可以起有规律的,这样后台在循环中获取,很方便。
for(int i=0;i<10;i++)
request.form["name"+i.ToString()],
[/Quote]

++ 看到不 错的方法
笑道江湖情 2011-04-06
  • 打赏
  • 举报
回复
恩 一般动态添加的话,我都根据规则遍历获取。
  • 打赏
  • 举报
回复
hebine~~~
heku ne
kingdom_0 2011-04-06
  • 打赏
  • 举报
回复
String arr[] = Request.Form.AllKeys;
循环遍历.
小童 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 huangwenquan123 的回复:]
HTML code
<form action="Default13.aspx" method="post">
<input name="a1" value="1" />
<input name="a2" value="2" />
<input name="a3" value="3" />
<input name="a4" value="4" />
……
[/Quote] .
sfxdawn 2011-04-05
  • 打赏
  • 举报
回复
好久没来论坛逛了,JF
段传涛 2011-04-05
  • 打赏
  • 举报
回复
html 写在 js里
c# 代码 写在cs里
段传涛 2011-04-05
  • 打赏
  • 举报
回复
当然可以了。
name 是你的数组吧。这样就ok了
name.Add(new position("1","静静","女","23") );
name.Add(new position("2", "晶晶", "女", "23"));
name.Add(new position("3", "小杰", "男", "23"));
下面为了 给你测试----------------
GridView1.DataSource = mylist;
GridView1.DataBind();
————————————————————————————————————————————————
public class position
{
private string id;
private string name;
private string sex;
private string age;
public position(string getid, string getname, string getsex, string getage)
{
id = getid;
name = getname;
sex = getsex;
age = getage;
}
public string _id
{
get { return id; }
}
public string _name
{
get { return name; }
}
public string _sex
{
get { return sex; }
}
public string _age
{
get { return age; }
}
}
}
--------------------------ok 了 测试下。
快溜 2011-04-05
  • 打赏
  • 举报
回复
[Quote=引用楼主 beckfun 的回复:]
在不用GridView等服务器控件以及AJAX的情况下,也就是页面一个table然后通过JS来添加tr tr内的格式固定,输入完信息,提交,接受使用request.from
我看到PHPWIND使用的是页面表单内的name使用的是***[***],也查了相关PHP文档,说是表单数组,

不知道是否有方法把其转成ASP.NET
不知我想法是否太过理想?!
示例

HTML code
……
[/Quote](table然后通过JS来添加tr tr内的格式固定,输入完信息.....)
既然这样,我相信你也可以用js获取输入的信息,并利用ajax方式传给后台。
子夜__ 2011-04-05
  • 打赏
  • 举报
回复
直接把数组传过去。
加油馒头 2011-04-05
  • 打赏
  • 举报
回复
纯粹的数组貌似没有

不过通过循环的方式取值 倒是有的
zell419 2011-04-05
  • 打赏
  • 举报
回复
jf 。
还是规规矩矩的好 。
beckfun 2011-04-05
  • 打赏
  • 举报
回复
额..沉下去了....
beckfun 2011-04-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 taomanman 的回复:]

有些本身可以很好解决的办法为什么不用,非要整出不用这个不用那个来做,能解决问题的办法都是好办法
[/Quote]
只是茶余饭后的一种想法,能实现固然是好...实现不了也无关紧要...有很多中方法可以替代
加载更多回复(12)
1.运行环境 本书7~10章所附代码的运行环境 Windows家族,.NET Framework 2.0及以上版本 IIS 5.0及以上版本 本书14~16章所附代码的运行环境 Windows家族,Apache 2.0及以上版本 PHP 5.0及以上版本 本书17~18章所附代码的运行环境 Windows家族,Tomcat JDK6.0 本书19~21章所附代码的调试环境 IE 6.0及以上版本 2.调试环境 本书7~10章所附代码的调试环境 Windows家族,.NET Framework 2.0及以上版本 Visual Studio 2005及以上版本、ASP.NET 2.0及以上版本 本书14~16章所附代码的调试环境 Windows家族,Apache 2.0及以上版本 PHP 5.0及以上版本 本书17~18章所附代码的调试环境 JDK6.0 Eclipse3.2+Lomboz 本书19~21章所附代码的调试环境 IE 6.0及以上版本 文本编辑器 3.本书所附光盘范例 第7章(/07/) DataTypeApplication/Default.aspx 检查和转换数据 第8章(/08/) StringApplication/StringDealwith.aspx 字符串处理 StringBuilderApplication/DealWithStringBuilder.aspx 动态字符串处理 第9章(/09/) RegexApplication/Default.aspx 正则表达式类的应用 RegexApplication/GetPageHtmlData.aspx 获取网页的内容 第10章(/10/) ASPNETValidator/Compare.aspx 比较验证 ASPNETValidator/CompareCheck.aspx 数据类型检查 ASPNETValidator/CompareValue.aspx 值比较验证 ASPNETValidator/CustomClient.aspx 自定义客户端验证 ASPNETValidator/CustomServer.aspx 自定义服务器端验证 ASPNETValidator/NotNull.aspx 非空验证 ASPNETValidator/NotNullInitValue.aspx 不等于初始化值的验证 ASPNETValidator/RangeDate.aspx 日期范围验证 ASPNETValidator/RangeInt.aspx 整数范围验证 ASPNETValidator/RangeLetter.aspx 字母范围验证 ASPNETValidator/REDate.aspx 日期格式验证 ASPNETValidator/REEmail.aspx 电子邮件格式验证 ASPNETValidator/REIdentity.aspx 身份证号码格式验证 ASPNETValidator/REInt.aspx 整数格式验证 ASPNETValidator/RENumber.aspx 数值格式验证 ASPNETValidator/REPhone.aspx 电话号码格式验证 ASPNETValidator/REUrl.aspx URL地址格式验证 ASPNETValidator/SummaryDialog.aspx 对话框式验证摘要 ASPNETValidator/SummaryPage.aspx 网页式验证摘要 第11章(/11/) 判断是否为对象.asp 判断是否为对象 判断是否为数值.asp 判断是否为数值 判断是否为数组.asp 判断是否为数组 判断是否为日期.asp 判断是否为日期 判断是否为空.asp 判断是否为空 判断是否为空值.asp 判断是否为空值 获取变量类型信息.asp 获取变量类型信息 第12章(/11/) 从中截取字符串.asp 从中截取字符串 切分字符串.asp 切分字符串 删除字符串前后导空格.asp 删除字符串前导空格.asp 删除字符串后导空格.asp 反向截取字符串.asp 反向查找字符串.asp 字符串倒序排列.asp 字符串大写转化.asp 字符串小写转化.asp 字符串替换.asp 将数组元素连接为字符串.asp 构造制定字符串.asp 正向截取字符串.asp 正向查找字符串.asp 获取字符串长度.asp 第13章(/14/) Matches集合与Macth对象.asp 指定忽略大小写.asp 获取Matches集合.asp 进行正则匹配替换.asp 进行正则匹配检验.asp 第14章(/14/) 浮点型数据测试.php 浮点型数据测试 字符串数据测试.php 字符串数据测试 数组数据测试.php 数组数据测试 对象测试.php 对象测试 数据类型识别.php 数据类型识别 强制类型转化.php 强制类型转化 计算圆周面积程序.php 计算圆周面积程序 字符串转化.php 字符串转化 数值转化.php 数值转化 数组转化.php 数组转化 第15章(/15/) 计算字符串的长度.php 计算字符串的长度 访问单个字符.php 访问单个字符 检索字符的位置.php 检索字符的位置 截取子字符.php 截取子字符 查找字符串出现的次数.php 查找字符串出现的次数 替换子字符串.php 替换子字符串 按照特定字符进行分割.php 按照特定字符进行分割 按照指定数目进行分割.php 按照指定数目进行分割 删除字符串的空白.php 删除字符串的空白 字符串的填补.php 字符串的填补 字符串大小写的转换.php 字符串大小写的转换 字符串的反转.php 字符串的反转 字符串按ASCII码顺序比较.php 字符串按ASCII码顺序比较 字符串按“自然排序”法比较.php 字符串按“自然排序”法比较 根据单词的发音比较.php 根据单词的发音比较 根据单词的相似性比较.php 根据单词的相似性比较 查找子字符串.php 查找子字符串 搜寻出现的字符.php 搜寻出现的字符 字符匹配.php 字符匹配 字符替换.php 字符替换 字符串翻译.php 字符串翻译 格式化数字.php 格式化数字 格式化表单字符串.php 格式化表单字符串 24.php 格式化字符串 25.php 格式化HTML实体 26.php HTML标签的清理 解析URL字符串.php 解析URL字符串 解析查询字符串.php 解析查询字符串 URL编码处理.php URL编码处理 查询字符串的构造.php 查询字符串的构造 第16章(/16/) 字符串模式匹配.php 字符串模式匹配 字符串大小模式匹配.php 字符串大小模式匹配 日期字符串模式匹配.php 日期字符串模式匹配 模式替换.php 模式替换 模式分割.php 模式分割 正则表达式匹配.php 正则表达式匹配 其他的正则表达式匹配.php 其他的正则表达式匹配 取得正则表达式的全部匹配.php 取得正则表达式的全部匹配 返回与模式匹配的数组单元.php 返回与模式匹配的数组单元 正则表达式的替换.php 正则表达式的替换 正则表达式的拆分.php 正则表达式的拆分 表单验证.php 表单验证 UBBCode.php UBB代码 ubb.html UBB代码输入界面 ubb.php UBB代码输出界面 Apache日志分析.php Apache日志分析 第17章(/17/) JSPExample1.jsp JSP页面中整型数据的使用 JSPExample2.jsp JSP页面中循环输出整型数据 JSPExample3.jsp 计算一光年的距离 JSPExample4.jsp JSP页面中计算圆的面积 JSPExample5.jsp JSP页面中字符数据的简单使用 JSPExample6.jsp 结合布尔类型变量判断学生成绩等级 JSPExample7.jsp text.html页面提交至该页,并显示提交数据 text.html 页面数据提交至JSPExample7.jsp JSPExample8.jsp 不同类型混合运算自动转换 JSPExample9.jsp 不同类型混合运算强制转换 JSPExample10.jsp 字符串类型与其他数据类型的转换 JSPExample11.jsp 解析字符串的子字符串 stringOP.html 页面数据提交至JSPExample12.jsp JSPExample12.jsp 字符串替换 JSPExample13.jsp 字符串大小写转换、反转等操作 logon.html 页面数据提交至JSPExample14.jsp JSPExample14.jsp 字符串数据的比较 JSPExample15.jsp 字符串数据的连接 JSPExample16.jsp 字符串数据的格式化 第18章(/18/) 1.jsp Pattern对象使用split方法示例一 2.jsp Pattern对象使用split方法示例二 3.jsp Matcher对象使用appendReplacement方法示例 4.jsp Matcher对象使用groupCount方法示例 5.jsp Matcher对象使用find方法示例 6.jsp Matcher对象使用group方法示例 7.jsp 字符串对象使用split方法 8.jsp Matcher对象使用replaceAll方法示例 9.html 页面数据提交至9.jsp 9.jsp 利用正则表达式验证邮箱地址 10.html 页面数据提交至10.jsp 10.jsp 利用正则表达式验证URL地址 11.html 页面数据提交至11.jsp 11.jsp 利用正则表达式验证电话号码 第20章(/20/) 从字符串中提取子串(1).html 从字符串中提取子串(1) 从字符串中提取子串(2).html 从字符串中提取子串(2) 从字符串中提取子串(3).html 从字符串中提取子串(3) 删除或替换数组中部分数据.html 删除或替换数组中部分数据 删除数组中最后一个元素.html 删除数组中最后一个元素 删除数组中的第一个元素.html 删除数组中的第一个元素 反序排列数组中的元素.html 反序排列数组中的元素 在字符串上加入超级链接.html 在字符串上加入超级链接 在字符串两端加上小字体标记.html 在字符串两端加上小字体标记 在字符串两端加入上标标签.html 在字符串两端加入上标标签 在字符串两端加入下标标签.html 在字符串两端加入下标标签 在字符串两端加入斜体标签.html 在字符串两端加入斜体标签 在字符串两端加入锚点标志.html 在字符串两端加入锚点标志 在字符串的两端加上固定宽度字体标记.html 在字符串的两端加上固定宽度字体标记 在字符串的两端加上粗体标志.html 在字符串的两端加上粗体标志 在字符串的两端加入下划线标记.html 在字符串的两端加入下划线标记 在指定字符串的两端加上大字体标志.html 在指定字符串的两端加上大字体标志 在数组前面插入数据.html 在数组前面插入数据 对数组中的元素进行排序.html 对数组中的元素进行排序 将一个或多个字符串连接到当前字符串的末尾.html 将一个或多个字符串连接到当前字符串的末尾 将字符串分割并存储到数组中.html 将字符串分割并存储到数组中 将字符串转化为大写格式.html 将字符串转化为大写格式 将字符串转化为小写格式.html 将字符串转化为小写格式 将指定的数据添加到数组中.html 将指定的数据添加到数组中 将数组元素连接为字符串.html 将数组元素连接为字符串 替换字符串中指定的内容.html 替换字符串中指定的内容 根据指定的Unicode编码返回一个字符串.html 根据指定的Unicode编码返回一个字符串 比较两个字符串的大小.html 比较两个字符串的大小 获取字符串的长度.html 获取字符串的长度 获取指定位置的字符的Unicode编码.html 获取指定位置的字符的Unicode编码 获取指定字符(串)第一次在字符串中出现的位置.html 获取指定字符(串)第一次在字符串中出现的位置 获取数组中的一部分数据.html 获取数组中的一部分数据 设置字符串输出时的前景色.html 设置字符串输出时的前景色 设置字符串输出时的字体大小.html 设置字符串输出时的字体大小 返回一个包含数组中全部数据的字符串.html 返回一个包含数组中全部数据的字符串 返回字符串中指定位置处的字符.html 返回字符串中指定位置处的字符 连接其他数组到当前数组末尾.html 连接其他数组到当前数组末尾 第21章(/21/) 判断字符串中是否存在匹配内容.html 判断字符串中是否存在匹配内容 对字符串进行匹配检测.html 对字符串进行匹配检测 替换字符串中的指定内容.html 替换字符串中的指定内容 编译正则表达式.html 编译正则表达式 获取与正则表达式进行匹配检测的字符串.html 获取与正则表达式进行匹配检测的字符串 获取匹配内容右侧的字符信息.html 获取匹配内容右侧的字符信息 获取匹配内容左侧的字符信息.html 获取匹配内容左侧的字符信息 获取匹配的内容的最后一个索引位置.html 获取匹配的内容的最后一个索引位置 获取子匹配的结果.html 获取子匹配的结果 获取字符串中所有的匹配信息.html 获取字符串中所有的匹配信息 获取最近一次匹配的内容.html 获取最近一次匹配的内容 获取最近一次匹配的最后一个子匹配.html 获取最近一次匹配的最后一个子匹配 获取第一次匹配的起始位置(1).html 获取第一次匹配的起始位置(1) 获取第一次匹配的起始位置(2).html 获取第一次匹配的起始位置(2)
标题:PHP基础教程 出处:风流的CG网络日志 时间:Mon, 28 Aug 2006 07:24:34 +0000 作者:yufeng 地址:http:///read.php?38 内容: 提供给新手学习的 PHP新手教程,是一个比较有价值的PHP新手教程! 一、PHP简介 PHP是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用PHP建立一个真正交互的WEB站点。本教程并不想让你完全了解这种语言,只是能使你尽快加入开发动态web站点的行列。我假定你有一些HTML(或者HTML编辑器)的基本知识和一些编程思想。 1.简介 PHP是能让你生成动态网页的工具之一。PHP网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写PHPPHP代表:超文本预处理器(PHP: Hypertext Preprocessor)。PHP是完全免费的,不用花钱,你可以从PHP官方站点(http://www.php.net)自由下载。PHP遵守GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。PHP在大多数Unix平台,GUN/Linux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装PHP的资料可以在PHP官方站点上找到。安装过程很简单。 如果你的机器解决了2000问题,那么PHP也一样没有千年虫问题! 1.1 历史 三年前,Rasmus Lerdorf为了创建他的在线简历而创造了"个人主页工具"(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。 PHP虽然很容易学习,但是速度上比mod_perl(植入web服务器的perl模块)慢。现在有了可以与mod_perl速度想媲美的被称作Zend的新引擎,而PHP4就可以充分利用这个引擎。PHP4还处在BETA测试阶段。Andy Gutmans和Zeev Suraki是Zend的主要作者。可以去Zend站点(http://www.zend.com)了解更多。 PHP的应用在个人性质的web工程中增长显著。根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用PHP技术。 1.2 PHP的先进之处 应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度缓慢(直到PHP4之前)。但是PHP的邮件列表很是有用而且除非你正在运行像Yahoo!或者Amazon.com这样的极受欢迎的站点,你不会感觉出PHP的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看PHP有那些优点: - 学习过程 我个人更喜欢PHP的非常简单的学习过程。与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的PHP编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。 PHP的语法与C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,PHP太简单了。相反的,如果你对PHP了解较多,那么你对于其他几种语言的学习都很简单了。 你只需要30分钟就可以将PHP的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB站点。由于PHP代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入PHP使得你的站点更加具有动态特性。 - 数据库连接 PHP可以编译成具有与许多数据库相连接的函数。PHP与MySQL是现在绝佳的组合。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。PHPLIB就是最常用的可以提供一般事务需要的一系列基库。 - 可扩展性 就像前面说的那样,PHP已经进入了一个高速发展的时期。对于一个非程序员来说为PHP扩展附加功能可能会比较难,但是对于一个PHP程序员来说并不困难。 - 面向对象编程 PHP提供了类和对象。基于web的编程工作非常需要面向对象编程能力。PHP支持构造器、提取类等。 - 可伸缩性 传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的PHP可以具有更高的可伸缩性。 - 更多特点 PHP的开发者们为了更适合web编程,开发了许多外围的流行基库,这些库包含了更易用的层。你可以利用PHP连接包括Oracle,MS-Access,Mysql在内的大部分数据库。你可以在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,你可以选择你的PHP安装版本需要哪些功能。引用Nissan的Xterra的话来说就是PHP可以做到你想让它做到的一切而且无所不能! 1.3 竞争对手:ASP,mod_perl,JSP 我当然不清楚ASP/JSP能做些什么。不过明确的是编写那样的代码有多简单,购买它们会有多昂贵以及它们需要多么昂贵和强大的硬件。如果你有什么中立的观点(比如说没有被SUN和Microsoft的百万美金所影响),请顺便通知我。 据我所知,JSP基于Java,因此Java程序员可以轻松开始编码。ASP只是一个一般的引擎,具有支持多种语言的能力,不过默认的并且是最常用的还是VBScript。 mod_perl与Perl一样强大,只是更快一些。 二、PHP入门 PHP站点的在线教程已经很棒了。在那里还有一些其他教程的链接。而本文的该部分将让你对PHP熟悉一点。我不可能做到没有任何遗漏,我的目的只在于能让你迅速开始你的PHP编程。 2.1 首要条件 你首先必须要有一个正在工作着的支持PHP的web服务器。我假定在你的服务器上所有PHP文件的扩展名为.php3。 2.2 PHP的安装 生成一个名为test.php3的文件,含有以下内容: 然后在你的浏览器中打开此文件。看看这个页面你就知道你的PHP安装使用的选项了。 2.3 语法 就像前面提到的一样,你可以混合编写你的PHP代码和HTML代码。因此你必须有办法将两者区别开来。以下就是你可以采用的几种方法。你可以选用其中一种你最适应的并且就这样坚持这种方法! 从HTML中分离 以下是可以使用的方法: . . . 语句 与Perl和C一样,在PHP中用(;)来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。 注释 PHP支持C,C++和Unix风格的注释方式: /* C,C++风格多行注释 */ // C++风格单行注释 # Unix风格单行注释 Hello,World! 通过我们已经学过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语: First PHP page 2.4 数据类型 PHP支持整数、浮点数、字符串、数组和对象。变量类型通常不由程序员决定而由PHP运行过程决定(真是好的解脱!)。但是类型也可以被函数cast或者settype()明确的设定。 数值 数值类型可以是整数或是浮点数。你可以用以下的语句来为一个数值赋值: $a = 1234; # 十进制数 $a = -123; # 负数 $a = 0123; # 八进制数 (等于十进制数的83) $a = 0x12; # 十六进制数(等于十进制数的18) $a = 1.234; # 浮点数"双精度数" $a = 1.2e3; # 双精度数的指数形式 字符串 字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。反斜杠(\)可以被用来分割某些特殊字符。举例如下: $first = 'Hello'; $second = "World"; $full1 = "$first $second"; # 产生 Hello World $full2 = '$first $second';# 产生 $first $second 可以将字符和数字利用运算符号连接起来。字符被转化成数字,利用其最初位置。在PHP手册中有详细的例子。 数组与哈希表 数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组的索引从0开始。虽然我在这里没有说明,但是你一样可以轻易的使用多维数组。 // 一个包含两个元素的数组 $a[0] = "first"; $a[1] = "second"; $a[] = "third"; // 添加数组元素的简单方法 // 现在$a[2]被赋值为"third" echo count($a); // 打印出3,因为该是数组有3个元素 // 用一个语句定义一个数组并赋值 $myphonebook = array ( "sbabu" => "5348", "keith" => "4829", "carole" => "4533" ); // 噢,忘了教长吧,让我们添加一个元素 $myphonebook["dean"] = "5397"; // 你定义的carale元素错了,让我们更正它 $myphonebook["carole"] => "4522" // 我还没有告诉你怎样使用数组的相似支持方式吗?让我们看一看 echo "$myphonebook[0]"; // sbabu echo "$myphonebook[1]"; // 5348 其他一些对数组或哈希表有用的函数包括sort(),next(),prev()和each()。 对象 使用new语句产生一个对象: class foo { function do_foo () { echo "Doing foo."; } } $bar = new foo; $bar->do_foo(); 改变变量类型 在PHP手册中提到:"PHP不支持(也不需要)直接在声明变量时定义变量类型;变量类型将根据其被应用的情况决定。如果你为变量var赋值为一个字符串,那么它变成了一个字符串。如果你又为它赋了整数值,那么它就变成了整数。" $foo = "0"; // $foo是字符串(ASCII 48) $foo++; // $foo是字符串"1" (ASCII 49) $foo += 1; // $foo现在是整数(2) $foo = $foo + 1.3; // $foo是一个双精度数(3.3) $foo = 5 + "10 Little Piggies"; // $foo是一个整数(15) $foo = 5 + "10 Small Pigs"; // $foo是一个整数(15) 如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。 2.5 变量与常量 可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。 $g_var = 1 ; // 全局范围 function test() { global $g_var; // 这样就可以声明全局变量了 } 更先进一些的是变量的变量表示。请参考PHP手册。这在有时会显得很有用。 PHP内置了许多已定义的变量。你也可以用define函数定义你自己的常量,比如define("CONSTANT","value")。 2.6 运算符 PHP具有C,C++和Java中的通常见到的运算符。这些运算符的优先权也是一致的。赋值同样使用"="。 算术和字符 以下只有一种运算符是有关字符的: $a + $b :加 $a - $b :减 $a * $b :乘 $a / $b :除 $a % $b :取模(余数) $a . $b :字符串连接 逻辑和比较 逻辑运算符有: $a || $b :或 $a or $b :或 $a && $b :与 $a and $b :与 $a xor $b :异或 (当$a或$b为true时为true,两者一样时为false) ! $a :非 比较运算符有: $a == $b :相等 $a != $b :不等 $a < $b :小于 $a $b :大于 $a >= $b :大于等于 与C一样PHP也有三重运算符(?:)。位操作符在PHP同样存在。 优先权 就和C以及Java一样! 2.7 控制流程结构 PHP有着与C一样的流程控制。我将在下面大概介绍。 if, else, elseif, if(): endif if (表达式一) { . . . } elseif (表达式二) { . . . } else { . . . } // 或者像Python一样 if (表达式一) : . . . . . . elseif (表达式二) : . . . else : . . . endif ; Loops. while, do..while, for while (表达式) { . . . } do { . . . } while (表达式); for (表达式一; 表达式二; 表达式三) { . . . } //或者像Python一样 while (expr) : . . . endwhile ; switch switch是对多重if-elseif-else结构的最好的替换: switch ($i) { case 0: print "i equals 0"; case 1: print "i equals 1"; case 2: print "i equals 2"; } break, continue break中断当前的循环控制结构。 continue被用来跳出剩下的当前循环并继续执行下一次循环。 require, include 就像C中的#include预处理一样。你在require中指定的那个文件将替代其在主文件中的位置。在有条件的引用文件时,可以使用include()。这样就使得你可以将复杂的PHP文件分割成多个文件并且在不同需要时分别引用它们。 2.8 函数 你可以像以下的例子一样定义自己的函数。函数的返回值可以是任何数据类型: function foo (变量名一, 变量名二, . . . , 变量名n) { echo "Example function.\n"; return $retval; } 所有PHP代码都可以出现在函数定义中,甚至包括对其他函数和类的定义。函数必须在引用之前定义。 2.9 类 利用类模型建立类。可以参考PHP手册中对类的详细解释。 class Employee { var $empno; // 员工人数 var $empnm; // 员工姓名 function add_employee($in_num, $in_name) { $this->empno = $in_num; $this->empnm = $in_name; } function show() { echo "$this->empno, $this->empnm"; return; } function changenm($in_name) { $this->empnm = $in_name; } } $sbabu = new Employee; $sbabu->add_employee(10,"sbabu"); $sbabu->changenm("babu"); $sbabu->show(); 三、从实例入手  PHP的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的PHP知识,我们可以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。 3.1 计划一个站点 一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的通用的页面头部和底部。 标题页面--front.html 这里我们有一个非常简单的html文件: 我的个人主页--欢迎 我的个人主页 欢迎 欢迎来我的寒舍,虽然这里现在暂时还没有什么。 不过我希望马上就可以多起来。 Copyright ? 我自己,1999 联系信息页面--count.html 同样我们又有了一个简单页面: 我的个人主页--联系信息 我的个人主页 联系信息 你可以通过1-800-PHP-INFO联系我 Copyright ? 我自己,1999 3.2 HTML到PHP 从上面你可以看出,每个页面有相同的头部和底部。像上面那样每个页面都写入相同的信息在工作量少的时候还可以,但是想象一下当有100多页面且你需要全部更改其头部或底部时你要花费多大精力?一页一页的手工更改是一件多么冗长无趣的事情啊!所以我们应该为这些页面编写PHP的头部和底部文件,之后我们只要在每个HTML页面中引用它们就行了。我们将把这些include文件放在一个叫include的子目录下。下面我们就把这些站点的通用内容写进文件中。 全站通用变量设定:common.inc phptalk@tnc.org"; $MyEmailLink = "$MyEmail"; $MyName = "PHP Talk"; $MySiteName = $MyName."'s Home Page"; ?> 通用页面头部:header.inc 通用页面底部:footer.inc Copyright ? by , 1999 新的页面front.php3: 欢迎来我的寒舍,虽然这里现在暂时还没有什么。 不过我希望马上就可以多起来。 新的cont.php3: 你可以通过1-800-PHP-INFO联系我 现在你就可以猜出这样安排的好处了。如果你想改动页面的头部或者底部,你只需要改动相应的文件就可以了。如果你要修改你的e-mail地址甚至你的名字,只要修改common.inc文件就行了。另外值得注意的是你可以把具有任何文件名或者文件扩展名的文件包含进你的文件中,你甚至可以包含其他站点上的文件。 3.3 计数器 让我们在首页上加上一个计数器。这个例子已经被讲过多次了,但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc包含以下代码: 然后我们更改front.php3文件以显示这个计数器: 看看我们的新front.php3 3.4 反馈表单 让我们再添加一个反馈表单以便你的浏览者填写并e-mail给你。举例来说我们用一种很简单的方法实现它,我们只需要两个页面:一个为浏览者提供输入表单;一个获得表单数据并处理、mail给你。 PHP中获取表单数据是很简单的。当一个表单被发送后,表单中所包含的各个元素被赋上了相应的值,而这样就可以像引用一般变量一样使用了。 在process_form.php3中,变量$mytext就被赋予了输入的值--非常简单!同样的,你可以从列表框、多选框、单选框、按钮等表单元素中取得变量值。你唯一要做的就是为表单中的每一个元素取名以便将来可以引用。 根据这个方法,我们可以生成一个简单的包含三个元素的表单:姓名、e-mail地址和留言。当浏览者发送表单后,处理该表单PHP页面(sendfdbk.php3)读取数据,检查姓名是否为空,最后将数据mail给你。 表单:form.php3 Your feedback on my home page. 处理表单:sendfdbk.php3 3.5 简单的站内搜索引擎 PHP可以调用外部程序。在Unix环境下我们可以利用程序grep实现一个简单的搜索引擎。我们可以做的稍微复杂一些:使用一个页面既输出一个表单供用户输入搜索字串又输出查询结果。
数组中,下面就可以处理并输出了 if ( count($myresult) ) { echo "\n"; while(list($fname,$fline) = each($myresult)) echo " $fname : $fline \n"; echo "\n"; } else { // 如果没有查询结果 echo "Sorry. Search on $searchstr returned no results.\n"; } pclose($fp); } ?> 注释: PHP_SELF是PHP内建的变量。包含当前文件名。 fgets()按行读取文件,最多4096(指定)字符长度。 fgetss()与fgets()相似,只是解析输出的HTML标记。 split()有一个参数是2,因为我们只需要把输出分成两部分。另外需要省略":"。 each()是一个数组操作函数,用来更方便的遍历整个数组。 popen()、pclose()与fopen()、fclose()的功能很相似,只是增加了管道处理。 请注意以上的代码并不是实现一个搜索引擎的好办法。这只是有助于我们更好学习PHP而举出的一个例子而已。理想的情况是你应该建立一个包含关键字的数据库然后进行搜索 四、与数据库链接 通过PHP你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据。MySQL是一种很流行的数据库,并且在互联网中有许多有关PHP与MySQL的教程。MySQL是免费的,这一点也许就吸引了不少人。由于其广泛应用,我就不想在这里赘述MySQL的使用方法了。Oracle被大量在企业应用中采用,因此我们就利用Oracle来介绍PHP与数据库的连接。我们当然不会提及Oracle数据库的设计原理,原因是这已经超出了我们的讨论范围。 PHP提供了两套函数与Oracle连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。如前所述,你的PHP安装选项应该可以支持两者的使用。 想获得更多有关在Microsoft Windows平台上安装支持PHP3的Apache服务器的知识以及更多有关Oracle数据库的知识,请查阅以下URL:www.csoft.net/~vsbabu/articles/oraphp.html。 4.1 连接 phpinfo(); ?> 以上代码使用TNSNAME(在你的tnsnames.ora文件中指明)定义的Oracle数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ora_logon函数返回一个非零的连接ID并储存在变量$conn中。 4.2 查询 假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子: (译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分) 4.3 显示结果 以下代码演示了怎样查询数据库并将结果输出: (译者注:以上代码段缺少注释,请读者参考PHP Manual的Oracle数据库函数部分) 4.4 基于HTTP的Oracle登录 将以下代码加在PHP页面代码之前以确认Oracle登录。注意你必须正确设定$ SID。 PHP_AUTH_USER)) { Header("WWW-authenticate: basic realm=\"$SID\""); Header("HTTP/1.0 401 Unauthorized"); $title="Login Instructions"; echo " You are not authorized to enter the site \n"; exit; } else { if (!($conn=ora_logon("$PHP_AUTH_USER@$SID",$PHP_AUTH_PW))) { Header("WWW-authenticate: basic realm=\"$SID\""); Header("HTTP/1.0 401 Unauthorized"); $title="Login Instructions"; echo " You are not authorised to enter the site \n"; exit; } } ?> 五、其它功能 5.1 生成图像 PHP可以操作处理图像。如果你已经安装了GD库,你甚至可以利用PHP生成图像。 (译者注:以上代码段缺少注释,请读者参考PHP Manual的图像处理函数部分) 这段代码在其他页面中通过以下标记调用,然后以上的那段button.php3代码取得text值并在另外取得的图像文件中加上该值--在以上的代码中该图像文件是images/button1.gif--最后输出到浏览器。假如你想在表单域中使用图像按钮,但是又不希望在每次按钮上的文字改变后不得不重新生成新的图像,就可以利用这样简单的方法动态生成图像文件。 5.2 Cookies PHP支持基于HTTP的cookies。在需要时你可以像使用一般变量一样方便的使用cookie。Cookies是浏览器保存于客户端的一些信息片段,由此你可以知道是否一台特定PC上的任何人都访问过你的站点,浏览者者在你的站点上的踪迹等等。使用cookies的典型例子就是对浏览者偏好的甄别。Cookies由函数setcookie()设定。与输出HTTP标头的函数header()一样,setcookie()必须在任何实际内容杯输出到浏览器之前调用。以下是一个简单例子: = "(60*60*24*7)" ) echo "Why did you take a week to come back. You should be here more often!? "; } ?> 5.3 基于HTTP验证 基于HTTP验证当PHP以CGI模式运行时不能实现。我们可以使用函数header()发送HTTP标头强制验证,客户端浏览器则弹出供输入用户名和密码的对话框。这两个变量被储存在$PHP_AUTH_USER和$PHP_AUTH_PW中,你可以使用这两个变量验证合法并允许进入。以下的例子通过用户名称/密码对为tnc/nature的验证一名用户的登录: 事实上再实际引用中不大可能如上面使用代码段明显的用户名称/密码对,而是利用数据库或者加密的密码文件存取它们。 5.4 文件上传 你可以利用PHP实现文件的功能,注意客户端的浏览器应该是Netscape3以上或者IE3以上。以下就是该功能的简单演示: ( upload.html ): Upload Your File (You may notice a slight delay while we upload your file.) 下面是处理上传的文件: ( receiver.php3 ): 2000000 ) { $error_msg = "Sorry, your file is too large."; return; } $the_time = time (); // 你需要对以下目录有写权限 $upload_dir = "/local/uploads"; $local_file = "$upload_dir/$the_time"; if ( file_exists ( '$local_file' ) ) { $seq = 1; while ( file_exists ( "$upload_dir/$the_time$seq" ) ) { $seq++; } $local_file = "$upload_dir/$the_time$seq"; }; rename ( $uploadfile, $local_file ); display_page (); } function display_page () { // 这里是你的页面内容 } php3 Receiving Script 5.5 常用函数 我们简单来看看一些常用的函数。 数组 array - 生成数组 count - 数组元素个数 sort - 数组排序,另有其他几种排序函数可供使用 list - 列出数组元素 each - 返回下一个key/value对 current - 返回当前数组元素 next,prev - 传回当前数组元素前后指针 日期和时间 checkdate - 验证日期/时间格式 date - 生成日期/时间格式 time - 当前时间信息 strftime - 格式化日期/时间 目录、文件系统 chdir - 改变目录 dir - 目录类别 opendir, readdir, closedir - 开启、读取、关闭目录 fopen, fclose - 开启、关闭文件 fgets, fgetss - 逐行读取内容 file - 将整个文件读入一个数组变量中 正则表达式 ereg - 匹配正则表达式 eregi - 大小写非敏感匹配正则表达式 ereg_replace -匹配正则表达式并替换 eregi_replace -大小写非敏感匹配正则表达式并替换 split - 依规则切开字符串并以数组形势存储 字符串 AddSlashes - 加上斜杠后使用字符串 echo - 输出一个或多个字符串 join, implode - 将数组元素合并为字符串 htmlentities, htmlspecialchars - 将HTML特殊字符转换为HTML标记形式 split - 依规则切开字符串并以数组形势存储 5.6 扩展我们的范例主页 我们将使用以上提到的一些函数和思想为我们的范例主页添加更多的动态内容。我们可以在每个页面的顶部加上导航栏,同时使得当前页自动的不被链接显示;同时还可以添加一个用户验证表单以便上传音乐、图像等文件并自动更新页面。 导航栏 实际上就是在footer.inc文件中加上一段代码。假设你的web站点中所有后缀为.php3的文件都会出现在导航栏中,以下就是被存为include/navbar.inc的代码: php3文件 */ # 读取目录 $d = dir("./"); echo " | \n"; while($entry = $d->read()) { // 忽略无文件情况 if ( !is_file($entry) ) continue; /* 将文件名与扩展名分开。由于.是正则表达式特殊字符,应该用\引出 */ list($filenm, $fileext) = split("\.",$entry, 2); // 忽略非.php3文件情况 if( $fileext != "php3" ) continue; /* 现在我们已经把.php3文件都选出,下面搜寻文件中的第一行(标题) 类似$title="something"; 并将以上标题内容分开,用作链接文字 */ $linknm = ""; $fp=fopen($entry,"r"); while($buffer=fgets($fp, 4096)) { $buffer = trim($buffer); // 我们已经把每个文件的标题放在文件的第一行以便搜索 // 但是当你改变变量名称时可能会带来大麻烦 if (ereg("title *= *\"", $buffer)) { /* 我们已经取得了标题内容并可以在此基础上 进行去除空格等处理。 必须以PHP代码方式处理,比如$title = "blah blah" */ eval($buffer); // 然后将链接文字显示为标题文字 $linknm = $title; break; } } fclose($fp); if ( $entry == basename($PHP_SELF) ) echo "$linknm"; else echo "$linknm"; echo " | "; } $d->close(); echo " \n"; ?> 照片收藏夹 我们将引用基于HTTP的验证、文件系统函数和文件上传功能维护放置图像文件的目录。 同时我们需要建立一个可以列出在该目录下所有照片的页面。 文件上传 PHP_AUTH_USER)) { Header("WWW-Authenticate: Basic realm=\"$MySiteName\""); Header("HTTP/1.0 401 Unauthorized"); echo "Sorry, you are not authorized to upload files\n"; exit; } else { if ( !($PHP_AUTH_USER==$MyName && $PHP_AUTH_PW==$MyPassword ) ) { // 如果是错误的用户名称/密码对,强制再次认证 Header("WWW-Authenticate: Basic realm=\"My Realm\""); Header("HTTP/1.0 401 Unauthorized"); echo "ERROR : $PHP_AUTH_USER/$PHP_AUTH_PW is invalid."; exit; } } if ( $cancelit ) { // 当浏览者按下"取消"按钮则转向首页面 header ( "Location: front_2.php3" ); exit; } function do_upload () { global $userfile, $userfile_size, $userfile_name, $userfile_type; global $local_file, $error_msg; global $HTTP_REFERER; if ( $userfile == "none" ) { $error_msg = "You did not specify a file for uploading."; return; } if ( $userfile_size > 2000000 ) { $error_msg = "Sorry, your file is too large."; return; } // Wherever you have write permission below... $upload_dir = "photos"; $local_file = "$upload_dir/$userfile_name"; if ( file_exists ( $local_file ) ) { $error_msg = "Sorry, a file with that name already exists"; return; }; // 你还可以由此检查文件名称/类型对以确定是何种文件:gif,jpg,mp3… rename($userfile, $local_file); echo "The file is uploaded\n"; echo "Go Back\n"; } $title = "Upload File"; include("include/header.inc"); if (empty($userfile) || $userfile=="none") { // 输出以下表单 ?> (You may notice a slight delay while we upload your file.) 照片图库 Here are some of our family photos. This PHP script can really be made better, by splitting into multiple pages. read()) { if (is_file("photos/$entry")) echo "\n"; } $d->close(); ?> 另外,你可以在文件上传的表单中加上一个输入元素去描述该上传的文件。这个元素将被存储在文件中,然后被以上的照片图库的那段代码所读出并显示出来。 六、网络资源 你可以通过web上的众多资源更多的了解PHP3。许多邮件列表和书籍对你都非常有用。 6.1 站点 PHP的爆炸性流行使得一夜之间出现了很多基于PHP的站点,其中不少站点有在线教程、范例代码、技巧和提示等内容。 国内 http://www.phpuser.com - PHP中文用户,也就是这里了 http://www.phpx.com - 中国PHP联盟 http://www.phpsite.net - PHP专门站 http://www.phpchina.com - PHP CHINA http://www.cpcw.com/netschool/homepage/cgi/ - 电脑报网页陶吧 国外 http://www.php.net/ - PHP官方站点 http://www.devshed.com/ - 极好的教程 http://px.sklar.com - 代码交换 http://www.phpbuilder.com/ - 教程、专栏和邮件列表档案 http://www.weberdev.com/ - 文章和代码 http://www.phpwizard.net/ - 提示与技巧 http://www.iometrics.com/php/phplist.php3/ - IOMetrics scripts的档案 http://www.e-gineer.com/phpkb/ - PHP知识库 6.2 邮件列表 你可以在PHP官方站点的"支持"栏目内登记获得以下的邮件列表。值得注意的是这些都是高流量流表,一般每天会有100份e-mail。 php3@lists.php.net - 主要的列表 php-dev@lists.php.net - 主要针对开发者 php-list@exp.com.cn - 本站的邮件列表,与论坛相通 6.3 引人注目的工程 一些基于PHP的工程已经发展得比较完善。其中一些更出色更引人注目的是: http:// phplib.netuse.de - PHPLib,一整套PHP函数库 http://www.phorum.org - Phorum是一个很完善的BBS系统 http://www.fishcartsql.org - FishCartSQL是一个电子商务解决方案 http://www.midgard-project.org - Midgard是一个网络应用开发平台 Generated by Bo-blog 2.0.2 sp2
国家级实验教学示范中心联席会计算机学科规划教材 教育部高等学校计算机类专业教学指导委员会推荐教材 面向“工程教育认证”计算机系列课程规划教材 谢从华,高蕴梅,黄晓华.Web系统与技术[M],清华大学出版社,2018年6月 第1章 Web系统与技术的基础知识... 1 1.1 Internet介绍... 1 1.1.1 Internet含义... 1 1.1.2 TCP/IP协议... 1 1.1.3 域名... 2 1.1.4 URL. 3 1.1.5 MIME. 3 1.1.6 HTTP协议... 4 1.2 Web浏览器... 5 1.3 Web服务器... 5 1.3.1 Web服务器... 5 1.3.2 Apache服务器... 5 1.3.3 IIS服务器... 6 1.4系统的主要技术概述... 7 1.4.1 HTML 概述... 7 1.4.2 JavaScript概述... 8 1.4.3 XML概述... 8 1.4.4 PHP概述... 8 1.4.5 Ajax概述... 9 1.5习题... 9 第2章 HTML网页设计基础... 10 2.1 HTML 网页... 10 2.1.1 简介... 10 2.1.2 HTML文件结构... 10 2.1.3 文件编辑器... 12 2.2 HTML基本标签... 13 2.2.1 元信息标签<Meta>. 13 2.2.2 文本标签... 18 2.2.3 列表标签... 20 2.2.4 表格标签... 24 2.2.5 超级链接标签... 27 2.2.6 图像标签... 29 2.2.7 背景声音标签... 29 2.2.8 视频标签... 29 2.3 网页表单和控件... 30 2.3.1 表单标签<form>. 30 2.3.2 表单的控件... 31 2.3.3 获取表单数据... 37 2.4 框架标签... 39 2.4.1 帧标记<frame>. 39 2.4.2 IFRAME标记... 40 2.5 习题... 40 第3章 CSS样式设计... 43 3.1 CSS 简介... 43 3.2 CSS 语法与使用... 43 3.2.1 CSS定义语法... 43 3.2.2 CSS的使用... 44 3.2.3 选择符... 48 3.3 CSS样式设计... 51 3.3.1字体样式... 51 3.3.2文本样式... 53 3.3.3颜色样式... 56 3.3.4 列表样式... 57 3.3.5表格样式... 60 3.4.6 鼠标样式... 64 3.4.7 滤镜样式... 67 3.4 CSS页面布局... 78 3.4.1 文本对齐... 78 3.4.2盒子模型... 81 3.4.3文字环绕float样式... 85 3.4.4 元素定位... 86 3.6 习题... 88 第4章 网页数据的有效性验证... 92 4.1验证控件... 92 4.1.1 验证控件分类... 92 4.1.2 ASP页面验证控件... 92 4.2 正则表达式... 102 4.2.1常用的元字符... 102 4.2.2 复杂的正则表达式... 102 4.3 正则表达式应用... 104 4.3.1 RegExp对象... 104 4.3.2 String 对象的正则表达式方法... 106 4.4 常见的正则表达式... 107 4.5 习题... 108 第5章 JavaScript编程技术... 109 5.1 JavaScript编程基础... 109 5.1.1 JavaScript简介... 109 5.1.2 Javascript的使用方法... 109 5.1.3 语法规则... 111 5.1.4 运算符和表达式... 112 5.1.5 函数... 117 5.1.6流程控制... 121 5.1.7 事件处理... 128 5.2 JavaScript对象编程... 130 5.2.1 Object 类型... 131 5.2.2 Array对象... 131 5.2.3 String对象... 133 5.2.4 Math对象... 138 5.2.5 Number对象... 142 5.2.6 Data对象... 143 5.3 JavaScript ActiveX编程技术... 145 5.3.1 FileSystemO
ExtAspNet v2.2.1 ExtAspNet是一组专业的Asp.net控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+ 注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。 示例: http://extasp.net/ 开源: http://extaspnet.codeplex.com/ 博客: http://sanshi.cnblogs.com/ 邮箱: sanshi.ustc@gmail.com 发布历史: +2010-03-28 v2.2.1 +为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 -修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。 -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 -隐藏示例首页最外层RegionPanel的边框ShowBorder="false"。 +集成Extjs最新版本v3.1.1。 -增加一个新的Theme - Access。 -修正了Firefox下Zoom In/Out时页面消失的BUG。 -删除Panel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。 +2010-01-31 v2.2.0 -使得Asp.net的控件ImageButton具有和Asp.net的Button控件类似的行为(Ajax提交)(feedback:261629698)。 +TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip控件动态增加删除Tab。 -增加示例tabstrip/tabstrip_addtab.aspx。 -重构了示例网站的架构,目前只有一层IFrame结构。 -为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。 -为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal="false")(feedback:zqmars)。 -Window控件更新。 -关闭按钮默认直接关闭,不会弹出确认对话框。 -GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。 -增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。 -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -WindowPosition默认居中,而不是黄金分割位置。 +Button, Window等控件弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。 -Confirm.GetShowReference的最后一个参数target变为枚举类型。 -Alert.GetShowReference中的showInParent参数也变为Target枚举类型。 -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制表单验证失败时提示对话框的显示位置。 +2010-01-06 v2.1.9 -集成Extjs最新版本v3.1.0。 -修正灰色皮肤的CSS问题。 -修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。 -为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。 -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 -修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 -使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性)。 -使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。 -Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。 -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。 -修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。 -修正HtmlEditor不能编辑的BUG(feedback:TheBox)。 -修正IE下有时会出现空白页面的情况(feedback:olivia919)。 +2009-12-06 v2.1.8 -修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。 -修正了IE下Grid中的一个JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的皮肤Gray。 -为示例工程添加改变语言和皮肤的下拉列表。 -为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。 +2009-12-01 v2.1.7 -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region控件中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。 -BorderPanel更名为RegionPanel。 -DropDownList拥有MarkInvalid方法(feedback:sun1299shine)。 -增加中国的省市县三级联动示例(data/shengshixian.aspx)(feedback:Blues T)。 -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。 -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。 +2009-11-26 v2.1.6 +修正动态创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。 -为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。 -重新设计模拟树的下拉列表的实现,避免选中某项后的闪烁。 +2009-11-21 v2.1.5 +Tree优化。 -修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。 -GetNodeById更名为FindNode,保持和FindControl一致命名。 -删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。 -删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。 -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。 -同时更名的还有GridColumn的ColumnId->ColumnID,GetColumnId->GetColumnID。 -Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。 -为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。 -为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。 -增加示例(other/custom_postback.aspx)(feedback:thebox)。 -如何自定义Javascript脚本和C#处理函数来响应键盘事件。 -为Tree增加AutoLeafIdentification属性。 -增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。 +2009-11-17 v2.1.4 -修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。 -部分ExtAspNet控件的设计时支持(会在后续版本中逐步完善)。 -v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。 -修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(feedback:dk3214)。 +为表单字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。 -为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。 +为表单字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。 -增加示例:form/form_validate.aspx +2009-10-19 v2.1.3 +增加支持在AJAX时改变的控件属性列表(/ajax.aspx)。 -ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 -加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)。 -在AJAX回发后确保Asp.net的按钮控件仍然具有AJAX的特性。 -更新/basic/login.aspx示例,使用验证图片(feedback:kedee)。 -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_autopostback.aspx(feedback:chenguizhu2006)。 -为所有的表单字段增加AJAX属性ReadOnly(feedback:skydb)。 -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。 -修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。 -增加pt_BR语言,由Ujvari提供。 +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 -所有Icon的列表在icon.aspx。 -为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。 +2009-09-15 v2.1.1 -修正不能动态修改AccordionPane属性Items的BUG。 +为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。 -如果需要在父页面弹出确认对话框,需要设置ConfirmTarget="_parent"(类似Window控件的Target="_parent")。 +为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。 -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference()); +TreeNode的前面的多选框可以自动回发了。 -为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 -示例在:http://extasp.net/data/tree_run.aspx -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。 -添加定时器控件Timer,用来定时发起AJAX请求。 +2009-09-06 v2.1.0 -Button的Pressed属性值能够正确的反映客户端的变化。 -优化Tree控件的AJAX实现。 +为页面的Form添加autocomplete="off"属性。 -参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 +添加对extjs3.0中所有语言的支持。 -ExtAspNet扩展的多语言包在js\languages\extaspnet目录下,目前只有en,zh_CN,zh_TW三种实现 -你可以向其中添加自己的语言版本,并执行js\languages下的pack.bat打包,最后编译工程。 +2009-09-01 v2.0.9 -为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 -这将会影响所有的aspx页面,所以要特别关注。 -重命名AccordionPanel为AccordionPane (这也是在Asp.net AJAX中使用的名称). +所有的面板默认有两个集合属性(Toolbars和Items). -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的). -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 -祝你生日快乐 - 小师妹妹。 +2009-08-29 v2.0.8 -ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。 -将所有的示例转化为英语版本。 -修正Tree控件的一个BUG(定义Mappings属性时)。 +PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。 -这个BUG导致Asp.net compatibility中的示例无法完成,现在已经修正。 +去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。 -这个属性和Button得ValidateForms属性类似,可以查看Asp.net compatibility中的示例。 +2009-08-25 v2.0.7 -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。 -这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 -简单方便,示例可以参考 default.aspx 或者 other\accordion_tree_run.aspx。 +2009-08-14 v2.0.6 -动态生成菜单实例(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(feedback:shguo)。 -优化AJAX的内部实现,每个页面保存的ViewState现在减少1/3左右(重要更新)。 -优化Tree节点的NodeId自动生成,减少ViewState占用。 +2009-08-09 v2.0 beta5 +ExtAspNet和Asp.net的提交按钮兼容问题(feedback:千帆)。 -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果Asp.net的按钮AJAX提交,必须设置UseSubmitBehavior="false" --也就是说生成的input的type不能是"submit",而这个限制在有些情况下是不可原谅的。 --我们做了优化,现在要使一个Asp.net的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的Asp.net控件了。 -在Page_Load中设置了哪些需要在AJAX中更新的Asp.net控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。 -示例在aspnet\fckeditor_run.aspx和aspnet\aspnet_run.aspx。 -FCKEditor和上传控件兼容。示例在aspnet\fileupload_run.aspx。 -修正ToolbarText的文本在AJAX下更新的BUG。 -Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。 -更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。 +2009-08-02 v2.0 beta4 +和Asp.Net的Forms Authentication兼容[feedback:mgzhenhong]。 -采用和Asp.Net Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。 -现在支持Response.Redirect,你可以选择Response.Redirect或者ExtAspNet.PageContext.Redirect重定向页面,两者效果一样。 -支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。 -Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。 -修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。 -修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。 -增加Menu和Accordion的示例。 -修正Window控件的IconUrl有时不显示(Target="_parent")的BUG[feedback:xmq&mgzhenhong]。 +2009-07-22 v2.0 beta3 -兼容FCKEditor。 -在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。 +2009-07-13 v2.0 beta2 -集成extjs最新版本v3.0。 +兼容IE6.0-7.0-8.0。 -这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。 -目前先禁用IE6.0-7.0的QuickTips。 -优化底层JavaScript。 +2009-07-05 v2.0 beta1 -更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。 -使用YUI Compressor压缩JavaScript和CSS文件。 -Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。 -ExtAspNet自身的CSS会紧挨着页面标签引入,这样在<head>中自定义的样式可以覆盖ExtAspNet缺省样式。 +Alert对话框会遮挡所有的Window窗口。 -使用一个变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。 -为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。 -因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。 -重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。 -更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。 -更新示例工程。 +2009-03-25 v1.3.1 -Tree在AJAX回发展开节点时JS错误[feedback:xlli]。[fixed] -Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。[fixed] -页面包含FileUpload控件,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet/fileupload.aspx)[fixed] -HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。[fixed] +2009-03-03 v1.3.0 -如果弹出的窗口(Ext-Window)含有<em>ASP.NET</em>控件FileUpload,则此弹出窗口在关闭时出现JS错误(http://extjs.com/forum/showthread.<em>php</em>?t=8129)[feedback:xlli]。[fixed] -如果页面中存在<em>ASP.NET</em>控件(TextBox),则第二次提交<em>表单</em>就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。[fixed] -页面上放置ExtAspNet-Button和<em>ASP.NET</em>-Button,则点击ExtAspNet-Button时激发的是<em>ASP.NET</em>-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的<em>实现</em>有关。[fixed] -ExtAspNet内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。[added] +如果以前你听过不要在ExtAspNet工程中使用<em>ASP.NET</em>标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet控件和<em>ASP.NET</em>标准控件和平共处了。[fixed] -如果一个<em>ASP.NET</em>按钮控件要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior="false" 即可。 -如果要在一次ExtAspNet的原生AJAX回发时更新<em>ASP.NET</em>控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet/aspnet.aspx)。 +2009-02-27 v1.2 beta9 -网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed] -自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed] +系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed] -底层使用Javascript创建一个Window控件的代码由原来的2000字符减少为500个字符。 -PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中<em>表单</em>修改的确认提示框的脚本”。 ---[updated]删除PageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference/GetConfirmFormModifiedCloseRefreshReference/GetConfirmFormModifiedClosePostBackReference三个方法代替。 -不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了<em>实现</em>功能为每个弹出页面添加box_parent_client_id查询字符串 -去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能<em>实现</em>为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。 ---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误! -A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。 ---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。 -Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中<em>表单</em>改变,然后关闭弹出窗口的客户端脚本”。 ---为Window控件增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认<em>表单</em>改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。 ---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断<em>表单</em>是否更新,然后在关闭窗口。 ---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。 -如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。 ---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。 -Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。 -CurrentActiveWindow改名为ActiveWindow。 -[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values) ---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。 +2009-02-23 v1.2 beta8 -ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed] -DropDownList在Ajax回发时不能计算模拟树的数据[feedback:huihuang]。[fixed] -DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。[fixed] -升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed] -页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。[added] +增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed] +2008-10-28 v1.2 beta7 -DropDownList没有选中任何一项,回发时报错[feedback:huihuang]。[fixed] -Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed] +PageContext优化。[fixed] -去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。 -去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。 -Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。 -Image控件增加ImageWidth/ImageHeight/ImageCssStyle/ImageCssClass/ImageAlt属性[feedback:jqpeng]。[fixed] -发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。[fixed] -ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed] -Row和Column布局时,修正IE下设置RowHeight="100%"时显示不正确的BUG。[fixed] -AccordionLink当鼠标移上和移开时,有背景色的变化效果[feedback:huihuang]。[fixed] +TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。[fixed] -有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。 +2008-10-20 v1.2 beta6 +使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed] -需要替换新的blowery.Web.HttpCompress.dll,解决方案见http://pohee.com/it/http-compression-in-aspnet-20/。 +DropDownList优化。[fixed] -去除EnableFirstItem/FirstItemText/FirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。 现在可以方便的在后台DropDownList1.Items.Insert(0, new ExtAspNet.ListItem("全部", "-1"));来达到同样的效果。 +如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。 -和<em>Asp.net</em>中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = ""; -ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。 -处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed] -注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding/border-width/margin)。[fixed] +为所有控件属性增加在VS中的智能提示。[fixed] -需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。 +控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。[fixed] -TriggerIconType.Default -> TriggerIconType.None -SystemIconType.Empty -> SystemIconType.None -RegexPattern.USER_DEFINED -> RegexPattern.None -<em>表单</em>验证属性名称变化(ValueToCompare->CompareValue,ControlToCompare->CompareControl)。[fixed] +注意:一个属性可以拥有多个值的情况。[fixed] -属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。 -其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。 +AccordionLink<em>实现</em>为控件。[fixed] -可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion->AccordionLink)(示例在other/accordion_links_run.aspx,other/accordion_links_run_iframe_htm)[feedback:jima]。 +确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form/form_dynamic_run.aspx)。[fixed] +2008-10-15 v1.2 beta5 -验证<em>表单</em>字段的ValueToCompare属性,为字符串时会出错的BUG。[fixed] +优化下拉列表。[fixed] -验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。 -DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。 -DropDownList不支持EmptyText属性。 -ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。 -DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。 +2008-09-27 v1.2 beta4 +EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other/accordion_run.aspx)。[fixed] -Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。 -影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。 -AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed] +AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other/accordion_links_run.aspx)。[fixed] -原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上<Items>标签。 -适当增大AccordionPanel中链接的高度20px->22px,同时对链接的样式也做了微调。 -通过BodyPadding控制链接列表的边距。 -这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需求由马季提出。 +2008-09-25 v1.2 beta3 +代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。[fixed] -Panel/GroupPanel/ContentPanel/Tree/HiddenField/PageLoading -TabStrip/Toolbar -TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed] -向Form中动态添加控件的BUG,现在form/form_dynamic_run.aspx示例已经能正确运行。[fixed] +大部分容器的子控件集合更正为Items(以前有些是Rows)。[fixed] -影响的控件包括Toolbar/Accordion/AccordionPanel/GroupPanel/Panel/SimpleForm/Window等。 -保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。 -保留TabStrip的Tabs(TabCollection)属性。 -保留PageLayout/BorderLayout的Regions(RegionCollection)属性。 -预祝今晚神七发射成功。 +2008-09-22 v1.2 beta2 +Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed] -表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时<em>数组</em>越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。 +代码优化与设计时支持(示例中<em>表单</em>控件都已支持设计)。[fixed] -PageManager/SimpleForm/Button/HyperLink/Label/Image/LinkButton/TextBox -TriggerBox/TwinTriggerBox/Window/TextArea/HtmlEditor/DatePicker/NumberBox -CheckBox/RadioButton/RadioButtonList/DropDownList -Grid +2008-09-19 v1.2 beta1 -Image/LinkButton/HyperLink增加一些Ajax可更新属性。[fixed] +隐藏的方式由HideMode属性控制Visibility/Offsets/Display。[fixed] -修正Form/SimpleForm中隐藏一个<em>表单</em>字段(Hidden=false)会占据页面空间的BUG。 -ToolbarText/ToolbarFill/ToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed] -Button去除MarginRight属性(可以通过CssStyle="margin-right:5px;"达到相同的效果)[fixed] +2008-09-09 v1.1 +Toolbar去除IsPageMenu属性,在网报中可以用自定义样式<em>实现</em>,而不应该写在控件中。[fixed] -网报:CssClass="toolbar-pagemenu" CssStyle="border:0px;",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(../images/pagemenu_toolbar_background.gif) repeat-x left top;}。 -Region去除默认的Layout=Fit,如果希望Region使用Fit/Anchor/Column/Row等布局的话,需要手工指定。[fixed] -ToolbarSeparator/ToolbarFill在Ajax更新Hidden属性的BUG。[fixed] +布局整理。[fixed] -新增Column/Absolute/Row三种布局,加上以前的Container/Fit/Anchor/Accordion/Border/Form六种布局,总共有9中布局可供使用。 -其中一些控件默认使用一种布局:SimpleForm(Form)/Form(Form)/Panel-GroupPanel(Container)/Accordion(Accordion)/PageLayout(Border)/BorderLayout(Border)/TabStrip(Card),所有布局控件默认的布局是Container。 -经常用到的布局控件:SimpleForm/Form/Accordion/TabStrip/BorderLayout,经常用到的布局:Fit/Row/Anchor +2008-09-08 v1.1 beta7 -MenuButton/MenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick="false" CssStyle="cursor:default;" [feedback:huayu]。[fixed] -MenuButton/MenuHyperLink/MenuSeparator/MenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed] +大部分的ExtAspNet控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。[fixed] -注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。 -US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。 -网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏<em>表单</em>字段,现在也可以使用Ajax了。 +2008-09-04 v1.1 beta6 -PageContext.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed] +模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed] -因为if("0,2,9,11,".indexOf('1,')>=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。 -解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) >= 0){ok}。 -DropDownList在Ajax时应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed] -Button/MenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed] -Tree的Ajax支持(尚需优化)。[fixed] +2008-09-02 v1.1 beta5 -DropDownList如果第一次没有绑定值,应该绑定到[[]](二维<em>数组</em>),而不是[](一维<em>数组</em>)。[fixed] -模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField/DataValueField/DataSimulateTreeLevelField/DataEnableSelectField等属性的值,否则Ajax回发时会出错)。[fixed] -UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。[fixed] -不要使用<em>Asp.net</em>的控件HiddenField,而是使用ExtAspNet的HiddenField,因为<em>Asp.net</em>的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed] -网报Ajax整合基本完成(除了待审批->下一步[审核/归档/出纳]操作,由于需要显示隐藏<em>表单</em>字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed] -IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。[fixed] -增加两个Theme[Slate/Black](样式尚需完善)。[fixed] +2008-09-01 v1.1 beta4 -非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed] -RadioButtonList去除EnableBackgroundColor/EnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm/Form)的背景色一致。[fixed] -TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed] -Web.config中增加配置项FormLabelWidth="80"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm/Form的<em>表单</em>字段标题的宽度。[fixed] +完善Ajax。[fixed] -RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue/SelectedItem)。 -DropDownList增加Ajax可更新属性Enable/SelectedIndex(SelectedValue/SelectedItem)/DataSource。 -Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。 -ToolbarText增加Ajax可更新属性Text。 +2008-08-31 v1.1 beta3 -TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed] -重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。[fixed] +安全的Ajax设计。[fixed] -这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。 -基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。 -整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。 -网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed] +2008-08-29 v1.1 beta1 +Window控件是否弹出的状态在回发时维持。[fixed] -控件设计的一个原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。 +完全抛弃<em>Asp.Net</em>Ajax,ExtAspNet控件内置Ajax支持。[fixed] -这是一个值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和<em>Asp.net</em>Ajax的回发),对于IFrame框架的交互也起到很好的加速效果。 -不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。 +在这种设计下,其实可以完全抛弃Javascript。 -比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。 -第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。 -推荐的做法是尽量用客户端<em>实现</em>,客户端<em>实现</em>复杂的直接用服务器端<em>实现</em>。 +目前ExtAspNetAjax的限制。 -只对ExtAspNet控件起作用,对<em>Asp.net</em>控件不起作用。 -对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。 -对改变控件的Visible属性会有错误。 -Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。 -PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。[fixed] -Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed] -Grid选中行的状态在第一次回发时不能保持的BUG。[fixed] +2008-08-26 v1.0 +已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。 -主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。 +优化弹出窗口中IFrame的显示速度。[fixed] -在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。 -PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor="#CADDF7",以便分隔符的颜色和Toolbar的颜色一致)[fixed] +PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed] -一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。 -TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed] +TabStrip中非当前Tab会延迟渲染。[fixed] -这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染时间。 -由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。 -不能比较两个DataPicker大小的BUG。[fixed] -TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed] -全新的ExtAspNet.Examples(基础知识/<em>表单</em>控件/数据绑定/容器布局/IFrame框架)。[fixed] +2008-08-19 v0.4 beta6 +PageManager增加两个属性(EnableInlineStyleJavascript/ApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe/default.aspx和iframe/page3.aspx)。[fixed] -测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。 -RadioButtonList放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed] +extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6/IE7)(http://www.extjs.net/forum/showthread.<em>php</em>?t=43246)(示例在test.aspx)[fixed] -现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true; +需要先回发页面再弹出IFrame窗口。[fixed] -在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。 -另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference("./simpleform.aspx"));。 +2008-08-15 v0.4 beta5 -点击关闭窗口的按钮,在IE6下会有JS错误。[fixed] -增加BorderLayout控件,示例在iframe/borderlayout.aspx。[fixed] +Radiobuttonlist显示有重影(示例在radio.aspx)。[fixed] -全新的样式。 -去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。 -GetValueReference取得的值不正确的BUG。 -动态向Form中添加FormRow,并动态的向FormRow中添加<em>表单</em>字段,以及如何取得<em>表单</em>字段的值。(示例在form_dynamic.aspx)[fixed] +IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed] -这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。 -现在"是否弹出窗口、窗口标题、IFrameUrl"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx) +2008-08-13 v0.4 beta4 -点击关闭窗口的按钮,在IE下会有JS错误。[fixed] -Window的右上角关闭图标增加提示,优化事件响应。[fixed] -Window的代码重构。[fixed] +修正一个的内存泄漏。[fixed] -IE7下测试,打开iframe/default.aspx页面,iexplorer占内存68.368M。 -内存存在泄漏时,点击iframe/page3.aspx页面8次后iexplorer占118.792M内存。 -修正后,点击iframe/page3.aspx页面8次后iexplorer占76.492M内存。 -IE窗口最小化时,IE会自动进行垃圾回收。 +2008-08-12 v0.4 beta3 -底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed] -Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight="true"解决)。[fixed] +页面正在加载的提示尽早的显示出来。[fixed] -首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。 -加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。 +2008-08-08 v0.4 beta2 -TabStrip延时加载出错。[fixed] -Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为./FE_ApplyEditor.aspx或~/Pages_ExtAspNet/FE_ApplyEditor.aspx。[fixed] -Window的WindowPosition="Center"并且Target="_parent",则会JS错误。[fixed] -<em>实现</em>网报首页下拉菜单和左侧菜单的导航功能。[fixed] -Window的创建在页面显示后进行,不计算在js渲染时间内。[fixed] -优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed] -button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。[fixed] -Window中的保存并关闭按钮和<em>Asp.net</em>Ajax冲突。[fixed] -优化关闭Window的js脚本,减少写到页面的js大小。[fixed] -加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed] +2008-08-05 v0.4 beta1 -DropDownList去除Traditional属性,和传统的<em>Asp.net</em>控件一样不可编辑。[fixed] -DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。[fixed] -为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed] -将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。[fixed] +弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed] -因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。 -一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。 -另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中<em>表单</em>内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx/simpleform.aspx)。 +PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed] -这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。 -每个页面必须添加一个PageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。[fixed] -TextField等<em>表单</em>字段增加Readonly属性。[fixed] +全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和<em>Asp.net</em> Ajax保持兼容)。[fixed] -最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe文件夹下) +示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx/page2.aspx/simpleform.aspx) -虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加一个属性(Target="_parent"),就完成了两种框架的转换,是不是很酷。 -显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)/page2.aspx(B)/simpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。 -示例2,Grid中弹出窗口。(default.aspx/page3.aspx/simpleform.aspx) +示例3,TriggerBox弹出窗口。(default.aspx/triggerbox.aspx/simpleform.aspx) -在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。 -示例4,弹出窗口中的弹出窗口。 -对整个Examples更新测试。[fixed] +2008-07-31 v0.3 beta12 -IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed] -对TabStrip/Panel/Window中的IFrame重新设计,如果设置IFrameUrl="#"或者"about:blank",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。[fixed] -如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed] -Tree控件,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed] +规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx/simpleform.aspx)。[fixed] -内部<em>实现</em>上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。 -参照Yslow的评分规则,将JS文件引用由head移动到body中。[fixed] -Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed] +IFrame内的页面宽度和高度会自动设置(是不是还在为1px/2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx/simpleform.aspx/simpleform2.aspx)[fixed] -增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE/Firefox)。 +2008-07-24 v0.3 beta11 -web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局<em>表单</em>字段距离右边界的宽度,同时每个<em>表单</em>字段都增加OffsetRight属性 [feedback:jima]。[fixed] -Window在回发时设置的Title不起作用的BUG。[fixed] -增加Image控件 [feedback:jima]。[fixed] -Tree控件,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed] -Image增加ToolTipTitle/ToolTipAutoHide两个属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed] -去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed] -过滤提示消息中的换行符(转换为<br/>),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed] +2008-07-23 v0.3 beta10 +完善Tree控件。[fixed] -如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。 -ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。 -更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。 -Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码![fixed] -Grid所有类型的列增加DataTooltipField/DataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。[fixed] +2008-07-22 v0.3 beta9 +IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed] -发现原来ie6不能正确解析li的高度,必须手工设置才行(style="height:20px;")。 +IE6/IE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed] -虽然最后未能解决<div style="width: 60px; white-space: nowrap; overflow: hidden; border: solid 1px red;"><div style="width: 16px; height: 18px; float: left;">##</div>差旅交通费</div>在IE和Firefox下显示的不同效果。 -但是通过用<img src="##" />来代替<div style="background:url(##)" />,从而<em>实现</em>FF和IE下样式的统一。 -刚看到old9的解决方案:把“差旅交通费”改成“<span style="margin-right: -1000px;">差旅交通费</span>”,在IE下和FF下的都不换行,:-) -LinkButton增加OnClick事件 [feedback:huihuang]。[fixed] -Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed] +增加树控件(Tree)(示例在tree2.aspx)。[fixed] -可以在回发时维持树的状态(选中行,折叠/展开,CheckBox)。 -可以通过Inline的方式添加树节点,也可以绑定到XmlDocument/XmlDataSource/SiteMap。 -点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。 +2008-07-16 v0.3 beta8 +ContentPanel中放置ExtAspNet控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed] -隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。 -现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局<em>实现</em>),只要超过Grid容器就会显示滚动条。 +IE6下,在应用<em>Asp.Net</em>Ajax后,Form中字段的宽度渲染不正确。[fixed] -调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。 -最后发现IE6下应用<em>Asp.Net</em>Ajax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG: 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有<em>表单</em>的宽度(box_fixFormWidthInIE6();): 示例在 Site.Master 页面。 +集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了![fixed] -解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();), 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。 +2008-07-14 v0.3 beta6 -增加FlashObject控件。[fixed] -PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed] -Accordion选中样式微调。[fixed] -预加载Form<em>表单</em>出错时提示信息的背景图片。[fixed] +Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed] -因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置"EnableDelayRender=false"。 -改变Grid中静态的CheckBoxField图片。[fixed] -TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击一个Tab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed] +2008-07-12 v0.3 beta5 -页面菜单Toolbar的分割符和背景不相融合。[fixed] -<em>表单</em>字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed] -如果是同种类型的<em>表单</em>字段,不需要指定CompareType,比如两个NumberBox比较值的大小不需要指定CompareType,而一个NumberBox和TextBox比较大小需要指定CompareType。 +如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx/ajax_editor.aspx)。[fixed] -这是由于ajax后执行的javascript中不能有return false语句。 +在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [feedback:xmzhu]。[fixed] -在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。 -弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是"#"。[fixed] +弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed] -原来的调用方法太麻烦(见示例中alert\alert_1.aspx和alert\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。 -点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed] +增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed] -增加SplitButton控件。[fixed] +2008-07-09 v0.3 beta4 -DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed] +Form<em>表单</em>字段(TextBox,DropDownList...)之间可以比较大小 [feedback:huihuang]。[fixed] -增加ControlToCompare/ValueToCompare/CompareOperator/CompareMessage四个属性,示例在form_compare.aspx。 +TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed] -特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。 -RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed] -FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed] +<em>表单</em>字段Enable=false时显示颜色太浅 [feedback:jima]。[fixed] -覆盖缺省样式的.x-item-disabled,设置不透明。 +2008-07-08 v0.3 beta3 -Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed] +增加HiddenField控件。[fixed] -其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle="display:none;"即可。 +TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。[fixed] -最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。 -模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed] +控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。[fixed] -增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。 -LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed] +2008-07-07 v0.3 beta2 +增加UpdatePanelConnector控件,支持在布局构建的页面使用<em>Asp.net</em> Ajax。[fixed] -使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。 -示例在ajax3.aspx/content_page4.aspx。 -示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。 +2008-07-03 v0.3 beta1 +容器控件的AutoHeight/AutoWidth默认为false。[fixed] -使用GroupPanel的地方需要手工添加AutoHeight="true"属性。 +增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。[fixed] -也可以在ContentPanel中放置用户控件,注意两者的区别。 +增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed] +支持<em>Asp.net</em> ajax异步加载。[fixed] -有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx/content_ajax2.aspx中。 -对于使用布局构建的页面(比如content_page1.aspx)还不能使用<em>Asp.net</em> ajax,因为页面是整体渲染的,先放弃。 +2008-07-02 v0.2 beta12 +关闭前提示当前页面已经被修改(示例在content_page1.aspx/simpleform.aspx)[fixed] -支持Iframe内按钮和window右上角关闭按钮。 -删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。 +iframe中的alert/confirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed] -在Firefox下还有问题。[fix pending] +排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed] -可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。 -可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。 +HyperLinkField/WindowField的链接地址支持服务器端格式(即是~/alert.aspx)。[fixed] -TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed] -可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。[fixed] +2008-06-30 v0.2 beta11 -增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。[fixed] -Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录时总记录数不会变化 [feedback:zgjiang2]。[fixed] -关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed] -如果<em>表单</em>验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。[fixed] +页面中任意可输入<em>表单</em>字段发生变化,可提示先保存。(示例在content_page1.aspx/simpleform.aspx)[fixed] -目前还不支持Window右上角关闭按钮的提示保存功能。 -Master/Content的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed] -Grid中的LinkButtonField设置ConfirmText会出错 [feedback:huihuang]。[fixed] -增加静态类Confirm。[fixed] +2008-06-27 v0.2 beta10 +Grid完善。[fixed] -CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。 -Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。 -切换分页时清空选中的值 [feedback:jqpeng]。 -增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。 -DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。 +2008-06-25 v0.2 beta9 +Window窗体中的Iframe只让内容区域滚动,而Toolbar不滚动的规则。(示例在content_page2.aspx/simpleform.aspx)[fixed] -在simpleform.aspx中:Panel[BodyPadding=5](Toolbar,Panel[Height=450 Layout=Fit](SimpleForm[AutoScroll=true])),则外面窗口的高度=450 + 5*2 + 26 + 32,其中26是Toolbar的高度,32是窗口的标题栏和下边框的高度。 +关闭Iframe的LoadMask,所以需要Iframe页面添加PageLoading控件,这样效果统一。[fixed] +Grid完善。 -去除EnableClientPaging和EnableClientSort属性,客户端排序和客户端分页在<em>ASP.NET</em>应用中会有很多问题(主要是状态保持的问题)。 +EnableServerSort改名AllowSorting。(示例在grid_sorting.aspx) -使用非常简单:设置AllowSorting=true,注册OnSort事件,在事件处理函数中重新绑定数据。 +增加AllowPaging属性。(示例在grid_paging.aspx) -使用非常简单:设置AllowPaging=true,PageSize=3,注册OnPageIndexChange事件,在事件处理函数中Grid1.PageIndex = e.NewPageIndex;OK。 +数据库分页支持。(示例在grid_database_paging.aspx) -使用也非常简单:设置AllowPaging=true,PageSize=3,在绑定时设置RecordCount为总的记录数,在OnPageIndexChange事件处理函数中Grid1.PageIn</a></div><div data-report-view="{"mod":"popu_645","index":"5","dest":"https://download.csdn.net/download/wode2600/2726130","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1713862001382_29045\"}","spm":"1035.2023.3001.6557"}" class="list-item" data-v-ca2d15ac><div class="recommend-title" data-v-ca2d15ac><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAltJREFUWEdjZGBgYGhv/yD45//nEEYGBrX//xj4QWK0AoxMDB//MzDcYmHkXVNZKfCeEWz5v8/1DP8ZuGhlKVZzGRm+sTDxNjI2tz1OZfjHYEpXy2GWMTGcZmxpe9xN62DH5TlQdDA2tzyeNSC+h1o66gCyQyApUdRNSIhNGBSS7979ejtv/utd5EQl2Q7IypT0ExJiFoc44O/LadOfbxp1wPAOAWlpdr5Pn//8/Pzp70+QT3GlAX5+ZnYeHhb2p09/fiImRIhOhBYWvIo21ryWu/Z8PHDp4tdn2BxgoM8l4+IiYH/k6OdjJ058vk91B7g487swMDD8v3Hj+2VJSTYpfn5mEZAlHz/9ffPq5e+Xqqoc2iD+nr0f99DSAQQ9RhMHcHAwsYSGCtvKy7Gr4HPBo0c/b69c/fbwzx///hJ0KQMDA9FpAGaYizO/tpkZjwUTEyMTsgX//v3/d/LUl+N79368RozFMDUkOwCkUUODU8zHW9CFg4OJG8T/8ePf181b3u25efPHK1IsB6nF6gAjY25ZEWFWcNPs169/fw4c+HQD3WBBIRaOsBAhZ5D4qjXv9r5/9+cHuhoHBz4NNjYmFpD4m7e/P547+/UxuhqsDoiPE3WWlWVXgvju/5ee3qfLsfmMiZmBEST+7y/Df2zyJcXSkRwcjDwgucePf95buOj1Xqo6gFBwDw8H/P/P8O/nz//fCPkWmzw7OyMXIyMDOLeQHQXkWIxNz9BygJubgI6kBCu4tUMt8PzF75e7dn24QlQuoJalxJgzCDomA901G/DOKSieBrJ7DgCPdYFAskV/NwAAAABJRU5ErkJggg==" alt data-v-ca2d15ac> <a target="_blank" href="https://download.csdn.net/download/wode2600/2726130" data-report-click="{"mod":"popu_645","index":"5","dest":"https://download.csdn.net/download/wode2600/2726130","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1713862001382_29045\"}","spm":"1035.2023.3001.6557"}" data-report-query="spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default" class="title" data-v-ca2d15ac>ExtAspNet_v2.3.2_dll</a></div> <a target="_blank" href="https://download.csdn.net/download/wode2600/2726130" data-report-click="{"mod":"popu_645","index":"5","dest":"https://download.csdn.net/download/wode2600/2726130","strategy":"2~default~OPENSEARCH~Rate","extra":"{\"utm_medium\":\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\",\"dist_request_id\":\"1713862001382_29045\"}","spm":"1035.2023.3001.6557"}" data-report-query="spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default" class="desc" data-v-ca2d15ac>ExtAspNet - ExtJS based <em>ASP.NET</em> Controls with Full AJAX Support ExtAspNet是一组专业的<em>Asp.net</em>控件库,拥有原生的AJAX支持和丰富的UI效果, 目标是创建没有ViewState,没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。 支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+ 注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。 示例: http://ext<em>asp.net</em>/ 开源: http://extaspnet.codeplex.com/ 博客: http://sanshi.cnblogs.com/ 邮箱: sanshi.ustc@gmail.com 发布历史: +2010-09-29 v2.3.2 -不绑定任何数据到Grid时,确保页面不会出错。 -修正了Grid列属性DataFormatString的一个bug,比如设置{0:yy-MM-dd HH:mm}时没有效果。 -修正下拉列表控件不能绑定DataTable的BUG(feedback:RedOcean)。 -增加土耳其语言资料文件(feedback:abdullaharslan)。 -Grid的BoundField增加NullDisplayText属性,用于处理数据库中的null值,如果没有设置则默认为空字符串。 -修正DatePicker中的一个bug(31/01/2010将会返回NULL)使用DateFormatString来生成SelectedDate属性(feedback:OktaEndy)。 -修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的Text,则SelectedValue返回值永远是第一个Text的值(feedback:ben.zhou)。 -应用补丁#6593, #6621(feedback:vbelyaev)。 +修正IE7下Grid分页速度慢(feedback:youwei, StevenGuan, hazardvn, gavindou, ttjacky)。 -实际上IE7下所以的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。 -俄语翻译(feedback:vbelyaev)。 +2010-06-30 v2.3.1 -ExtAspNet控件将不在依赖ViewState,减少1/4左右的HTTP数据传输量。 -控件和示例的增强。 +2010-03-28 v2.2.1 +为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 -修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。 -修正basic/hello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。 -隐藏示例首页最外层RegionPanel的边框ShowBorder="false"。 +集成Extjs最新版本v3.1.1。 -增加一个新的Theme - Access。 -修正了Firefox下Zoom In/Out时页面消失的BUG。 -删除Panel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。 +2010-01-31 v2.2.0 -使得<em>Asp.net</em>的控件ImageButton具有和<em>Asp.net</em>的Button控件类似的行为(Ajax提交)(feedback:261629698)。 +TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip控件动态增加删除Tab。 -增加示例tabstrip/tabstrip_addtab.aspx。 -重构了示例网站的架构,目前只有一层IFrame结构。 -为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。 -为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal="false")(feedback:zqmars)。 -Window控件更新。 -关闭按钮默认直接关闭,不会弹出确认对话框。 -GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。 -增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。 -修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。 -删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon="Close",现在需要这样定义Icon="SystemClose"。 -WindowPosition默认居中,而不是黄金分割位置。 +Button, Window等控件弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。 -Confirm.GetShowReference的最后一个参数target变为枚举类型。 -Alert.GetShowReference中的showInParent参数也变为Target枚举类型。 -MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制<em>表单</em>验证失败时提示对话框的显示位置。 +2010-01-06 v2.1.9 -集成Extjs最新版本v3.1.0。 -修正灰色皮肤的CSS问题。 -修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。 -为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。 -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle="float:left;"属性。 -修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。 -为TriggerBox和TwinTriggerBox增加EnableEdit属性。 -使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性)。 -使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。 -Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。 -增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。 -修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。 -修正HtmlEditor不能编辑的BUG(feedback:TheBox)。 -修正IE下有时会出现空白页面的情况(feedback:olivia919)。 +2009-12-06 v2.1.8 -修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。 -修正了IE下Grid中的一个JS问题(feedback:lqm4108)。 -修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。 +集成extjs3.0.3。 -修正弹出对话框的宽度计算错误(会保持最小的状态)。 -增加新的皮肤Gray。 -为示例工程添加改变语言和皮肤的下拉列表。 -为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。 +2009-12-01 v2.1.7 -增加示例(iframe/parent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。 -修正一些书写错误(feedback:bmck)。 -从Region控件中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。 -BorderPanel更名为RegionPanel。 -DropDownList拥有MarkInvalid方法(feedback:sun1299shine)。 -增加中国的省市县三级联动示例(data/shengshixian.aspx)(feedback:Blues T)。 -修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。 -修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。 +2009-11-26 v2.1.6 +修正动态创建Grid列的BUG(feedback:gxpan)。 -增加示例(data/grid_dynamic_columns.aspx)。 -修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。 -增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。 -为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。 -重新设计模拟树的下拉列表的<em>实现</em>,避免选中某项后的闪烁。 +2009-11-21 v2.1.5 +Tree优化。 -修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。 -GetNodeById更名为FindNode,保持和FindControl一致命名。 -删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。 -删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。 -增加示例(data/tree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。 +TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。 -同时更名的还有GridColumn的ColumnId->ColumnID,GetColumnId->GetColumnID。 -Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。 -为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。 -为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。 -增加示例(other/custom_postback.aspx)(feedback:thebox)。 -如何自定义Javascript脚本和C#处理函数来响应键盘事件。 -为Tree增加AutoLeafIdentification属性。 -增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。 +2009-11-17 v2.1.4 -修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。 -部分ExtAspNet控件的设计时支持(会在后续版本中逐步完善)。 -v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。 -修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack->AutoPostBack, Event PostBack->EnablePostBack)。 -为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(feedback:dk3214)。 +为<em>表单</em>字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。 -为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。 +为<em>表单</em>字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。 -增加示例:form/form_validate.aspx +2009-10-19 v2.1.3 +增加支持在AJAX时改变的控件属性列表(/ajax.aspx)。 -ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。 -加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)。 -在AJAX回发后确保<em>Asp.net</em>的按钮控件仍然具有AJAX的特性。 -更新/basic/login.aspx示例,使用验证图片(feedback:kedee)。 -为Grid增加AutoPostBack属性和RowClick事件,示例在/data/grid_autopostback.aspx(feedback:chenguizhu2006)。 -为所有的<em>表单</em>字段增加AJAX属性ReadOnly(feedback:skydb)。 -Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。 +2009-09-27 v2.1.2 -为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。 -修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。 -增加pt_BR语言,由Ujvari提供。 +为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。 -如果Panel具有IconUrl属性,则IconUrl优先于Icon。 -所有Icon的列表在icon.aspx。 -为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。 +2009-09-15 v2.1.1 -修正不能动态修改AccordionPane属性Items的BUG。 +为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。 -如果需要在父页面弹出确认对话框,需要设置ConfirmTarget="_parent"(类似Window控件的Target="_parent")。 +为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。 -一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。 -ExtAspNet.Alert.Show("参数错误!", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference()); +TreeNode的前面的多选框可以自动回发了。 -为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。 -示例在:http://ext<em>asp.net</em>/data/tree_run.aspx -Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。 -修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。 -添加定时器控件Timer,用来定时发起AJAX请求。 +2009-09-06 v2.1.0 -Button的Pressed属性值能够正确的反映客户端的变化。 -优化Tree控件的AJAX<em>实现</em>。 +为页面的Form添加autocomplete="off"属性。 -参考http://www.cnblogs.com/sanshi/archive/2009/09/04/1560146.html#1635830 +添加对extjs3.0中所有语言的支持。 -ExtAspNet扩展的多语言包在js\languages\extaspnet目录下,目前只有en,zh_CN,zh_TW三种<em>实现</em> -你可以向其中添加自己的语言版本,并执行js\languages下的pack.bat打包,最后编译工程。 +2009-09-01 v2.0.9 -为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。 +在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。 -这将会影响所有的aspx页面,所以要特别关注。 -重命名AccordionPanel为AccordionPane (这也是在<em>Asp.net</em> AJAX中使用的名称). +所有的面板默认有两个集合属性(Toolbars和Items). -尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的). -这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。 -祝你生日快乐 - 小师妹妹。 +2009-08-29 v2.0.8 -ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。 -将所有的示例转化为英语版本。 -修正Tree控件的一个BUG(定义Mappings属性时)。 +PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。 -这个BUG导致<em>Asp.net</em> compatibility中的示例无法完成,现在已经修正。 +去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。 -这个属性和Button得ValidateForms属性类似,可以查看<em>Asp.net</em> compatibility中的示例。 +2009-08-25 v2.0.7 -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。 -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。 -增加示例-如何将Grid控件导出为Excel(data\grid_excel_run.aspx)(feedback:503684912)。 -如果TreeNode的属性Enabled="false",则此项变灰并且不会被选中(feedback:your568)。 -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~/开头)的BUG。 -增加Accordion和Tree配合使用的示例(other\accordion_tree_run.aspx)。 -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。 +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。 -这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。 -简单方便,示例可以参考 default.aspx 或者 other\accordion_tree_run.aspx。 +2009-08-14 v2.0.6 -动态生成菜单实例(other\menu_dynamic_run.aspx和other\menu_dynamic2_run.aspx)(feedback:shguo)。 -优化AJAX的内部<em>实现</em>,每个页面保存的ViewState现在减少1/3左右(重要更新)。 -优化Tree节点的NodeId自动生成,减少ViewState占用。 +2009-08-09 v2.0 beta5 +ExtAspNet和<em>Asp.net</em>的提交按钮兼容问题(feedback:千帆)。 -在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果<em>Asp.net</em>的按钮AJAX提交,必须设置UseSubmitBehavior="false" --也就是说生成的input的type不能是"submit",而这个限制在有些情况下是不可原谅的。 --我们做了优化,现在要使一个<em>Asp.net</em>的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。 +PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的<em>Asp.net</em>控件了。 -在Page_Load中设置了哪些需要在AJAX中更新的<em>Asp.net</em>控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。 -示例在aspnet\fckeditor_run.aspx和aspnet\aspnet_run.aspx。 -FCKEditor和上传控件兼容。示例在aspnet\fileupload_run.aspx。 -修正ToolbarText的文本在AJAX下更新的BUG。 -Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。 -更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。 +2009-08-02 v2.0 beta4 +和<em>Asp.Net</em>的Forms Authentication兼容[feedback:mgzhenhong]。 -采用和<em>Asp.Net</em> Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。 -现在支持Response.Redirect,你可以选择Response.Redirect或者ExtAspNet.PageContext.Redirect重定向页面,两者效果一样。 -支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。 -Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。 -修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。 -修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。 -增加Menu和Accordion的示例。 -修正Window控件的IconUrl有时不显示(Target="_parent")的BUG[feedback:xmq&mgzhenhong]。 +2009-07-22 v2.0 beta3 -兼容FCKEditor。 -在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。 +2009-07-13 v2.0 beta2 -集成extjs最新版本v3.0。 +兼容IE6.0-7.0-8.0。 -这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。 -目前先禁用IE6.0-7.0的QuickTips。 -优化底层JavaScript。 +2009-07-05 v2.0 beta1 -更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。 -使用YUI Compressor压缩JavaScript和CSS文件。 -Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。 -ExtAspNet自身的CSS会紧挨着页面标签引入,这样在中自定义的样式可以覆盖ExtAspNet缺省样式。 +Alert对话框会遮挡所有的Window窗口。 -使用一个变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。 -为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。 -因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。 -重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。 -更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。 -更新示例工程。 +2009-03-25 v1.3.1 -Tree在AJAX回发展开节点时JS错误[feedback:xlli]。[fixed] -Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。[fixed] -页面包含FileUpload控件,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet/fileupload.aspx)[fixed] -HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。[fixed] +2009-03-03 v1.3.0 -如果弹出的窗口(Ext-Window)含有<em>ASP.NET</em>控件FileUpload,则此弹出窗口在关闭时出现JS错误(http://extjs.com/forum/showthread.<em>php</em>?t=8129)[feedback:xlli]。[fixed] -如果页面中存在<em>ASP.NET</em>控件(TextBox),则第二次提交<em>表单</em>就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。[fixed] -页面上放置ExtAspNet-Button和<em>ASP.NET</em>-Button,则点击ExtAspNet-Button时激发的是<em>ASP.NET</em>-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的<em>实现</em>有关。[fixed] -ExtAspNet内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。[added] +如果以前你听过不要在ExtAspNet工程中使用<em>ASP.NET</em>标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet控件和<em>ASP.NET</em>标准控件和平共处了。[fixed] -如果一个<em>ASP.NET</em>按钮控件要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior="false" 即可。 -如果要在一次ExtAspNet的原生AJAX回发时更新<em>ASP.NET</em>控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet/aspnet.aspx)。 +2009-02-27 v1.2 beta9 -网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed] -自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed] +系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed] -底层使用Javascript创建一个Window控件的代码由原来的2000字符减少为500个字符。 -PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中<em>表单</em>修改的确认提示框的脚本”。 ---[updated]删除PageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference/GetConfirmFormModifiedCloseRefreshReference/GetConfirmFormModifiedClosePostBackReference三个方法代替。 -不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了<em>实现</em>功能为每个弹出页面添加box_parent_client_id查询字符串 -去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能<em>实现</em>为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。 ---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误! -A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。 ---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。 -Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中<em>表单</em>改变,然后关闭弹出窗口的客户端脚本”。 ---为Window控件增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认<em>表单</em>改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。 ---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断<em>表单</em>是否更新,然后在关闭窗口。 ---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。 -如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。 ---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。 -Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。 -CurrentActiveWindow改名为ActiveWindow。 -[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values) ---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。 +2009-02-23 v1.2 beta8 -ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed] -DropDownList在Ajax回发时不能计算模拟树的数据[feedback:huihuang]。[fixed] -DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。[fixed] -升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed] -页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。[added] +增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed] +2008-10-28 v1.2 beta7 -DropDownList没有选中任何一项,回发时报错[feedback:huihuang]。[fixed] -Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed] +PageContext优化。[fixed] -去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。 -去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。 -Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。 -Image控件增加ImageWidth/ImageHeight/ImageCssStyle/ImageCssClass/ImageAlt属性[feedback:jqpeng]。[fixed] -发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。[fixed] -ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed] -Row和Column布局时,修正IE下设置RowHeight="100%"时显示不正确的BUG。[fixed] -AccordionLink当鼠标移上和移开时,有背景色的变化效果[feedback:huihuang]。[fixed] +TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。[fixed] -有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。 +2008-10-20 v1.2 beta6 +使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed] -需要替换新的blowery.Web.HttpCompress.dll,解决方案见http://pohee.com/it/http-compression-in-aspnet-20/。 +DropDownList优化。[fixed] -去除EnableFirstItem/FirstItemText/FirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。 现在可以方便的在后台DropDownList1.Items.Insert(0, new ExtAspNet.ListItem("全部", "-1"));来达到同样的效果。 +如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。 -和<em>Asp.net</em>中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = ""; -ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。 -处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed] -注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding/border-width/margin)。[fixed] +为所有控件属性增加在VS中的智能提示。[fixed] -需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。 +控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。[fixed] -TriggerIconType.Default -> TriggerIconType.None -SystemIconType.Empty -> SystemIconType.None -RegexPattern.USER_DEFINED -> RegexPattern.None -<em>表单</em>验证属性名称变化(ValueToCompare->CompareValue,ControlToCompare->CompareControl)。[fixed] +注意:一个属性可以拥有多个值的情况。[fixed] -属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。 -其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。 +AccordionLink<em>实现</em>为控件。[fixed] -可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion->AccordionLink)(示例在other/accordion_links_run.aspx,other/accordion_links_run_iframe_htm)[feedback:jima]。 +确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form/form_dynamic_run.aspx)。[fixed] +2008-10-15 v1.2 beta5 -验证<em>表单</em>字段的ValueToCompare属性,为字符串时会出错的BUG。[fixed] +优化下拉列表。[fixed] -验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。 -DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。 -DropDownList不支持EmptyText属性。 -ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。 -DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。 +2008-09-27 v1.2 beta4 +EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other/accordion_run.aspx)。[fixed] -Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。 -影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。 -AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed] +AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other/accordion_links_run.aspx)。[fixed] -原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上标签。 -适当增大AccordionPanel中链接的高度20px->22px,同时对链接的样式也做了微调。 -通过BodyPadding控制链接列表的边距。 -这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需求由马季提出。 +2008-09-25 v1.2 beta3 +代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。[fixed] -Panel/GroupPanel/ContentPanel/Tree/HiddenField/PageLoading -TabStrip/Toolbar -TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed] -向Form中动态添加控件的BUG,现在form/form_dynamic_run.aspx示例已经能正确运行。[fixed] +大部分容器的子控件集合更正为Items(以前有些是Rows)。[fixed] -影响的控件包括Toolbar/Accordion/AccordionPanel/GroupPanel/Panel/SimpleForm/Window等。 -保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。 -保留TabStrip的Tabs(TabCollection)属性。 -保留PageLayout/BorderLayout的Regions(RegionCollection)属性。 -预祝今晚神七发射成功。 +2008-09-22 v1.2 beta2 +Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed] -表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时<em>数组</em>越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。 +代码优化与设计时支持(示例中<em>表单</em>控件都已支持设计)。[fixed] -PageManager/SimpleForm/Button/HyperLink/Label/Image/LinkButton/TextBox -TriggerBox/TwinTriggerBox/Window/TextArea/HtmlEditor/DatePicker/NumberBox -CheckBox/RadioButton/RadioButtonList/DropDownList -Grid +2008-09-19 v1.2 beta1 -Image/LinkButton/HyperLink增加一些Ajax可更新属性。[fixed] +隐藏的方式由HideMode属性控制Visibility/Offsets/Display。[fixed] -修正Form/SimpleForm中隐藏一个<em>表单</em>字段(Hidden=false)会占据页面空间的BUG。 -ToolbarText/ToolbarFill/ToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed] -Button去除MarginRight属性(可以通过CssStyle="margin-right:5px;"达到相同的效果)[fixed] +2008-09-09 v1.1 +Toolbar去除IsPageMenu属性,在网报中可以用自定义样式<em>实现</em>,而不应该写在控件中。[fixed] -网报:CssClass="toolbar-pagemenu" CssStyle="border:0px;",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(../images/pagemenu_toolbar_background.gif) repeat-x left top;}。 -Region去除默认的Layout=Fit,如果希望Region使用Fit/Anchor/Column/Row等布局的话,需要手工指定。[fixed] -ToolbarSeparator/ToolbarFill在Ajax更新Hidden属性的BUG。[fixed] +布局整理。[fixed] -新增Column/Absolute/Row三种布局,加上以前的Container/Fit/Anchor/Accordion/Border/Form六种布局,总共有9中布局可供使用。 -其中一些控件默认使用一种布局:SimpleForm(Form)/Form(Form)/Panel-GroupPanel(Container)/Accordion(Accordion)/PageLayout(Border)/BorderLayout(Border)/TabStrip(Card),所有布局控件默认的布局是Container。 -经常用到的布局控件:SimpleForm/Form/Accordion/TabStrip/BorderLayout,经常用到的布局:Fit/Row/Anchor +2008-09-08 v1.1 beta7 -MenuButton/MenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick="false" CssStyle="cursor:default;" [feedback:huayu]。[fixed] -MenuButton/MenuHyperLink/MenuSeparator/MenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed] +大部分的ExtAspNet控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。[fixed] -注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。 -US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。 -网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏<em>表单</em>字段,现在也可以使用Ajax了。 +2008-09-04 v1.1 beta6 -PageContext.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed] +模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed] -因为if("0,2,9,11,".indexOf('1,')>=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。 -解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) >= 0){ok}。 -DropDownList在Ajax时应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed] -Button/MenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed] -Tree的Ajax支持(尚需优化)。[fixed] +2008-09-02 v1.1 beta5 -DropDownList如果第一次没有绑定值,应该绑定到[[]](二维<em>数组</em>),而不是[](一维<em>数组</em>)。[fixed] -模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField/DataValueField/DataSimulateTreeLevelField/DataEnableSelectField等属性的值,否则Ajax回发时会出错)。[fixed] -UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。[fixed] -不要使用<em>Asp.net</em>的控件HiddenField,而是使用ExtAspNet的HiddenField,因为<em>Asp.net</em>的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed] -网报Ajax整合基本完成(除了待审批->下一步[审核/归档/出纳]操作,由于需要显示隐藏<em>表单</em>字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed] -IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。[fixed] -增加两个Theme[Slate/Black](样式尚需完善)。[fixed] +2008-09-01 v1.1 beta4 -非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed] -RadioButtonList去除EnableBackgroundColor/EnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm/Form)的背景色一致。[fixed] -TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed] -Web.config中增加配置项FormLabelWidth="80"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm/Form的<em>表单</em>字段标题的宽度。[fixed] +完善Ajax。[fixed] -RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue/SelectedItem)。 -DropDownList增加Ajax可更新属性Enable/SelectedIndex(SelectedValue/SelectedItem)/DataSource。 -Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。 -ToolbarText增加Ajax可更新属性Text。 +2008-08-31 v1.1 beta3 -TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed] -重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。[fixed] +安全的Ajax设计。[fixed] -这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。 -基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。 -整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。 -网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed] +2008-08-29 v1.1 beta1 +Window控件是否弹出的状态在回发时维持。[fixed] -控件设计的一个原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。 +完全抛弃<em>Asp.Net</em>Ajax,ExtAspNet控件内置Ajax支持。[fixed] -这是一个值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和<em>Asp.net</em>Ajax的回发),对于IFrame框架的交互也起到很好的加速效果。 -不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。 +在这种设计下,其实可以完全抛弃Javascript。 -比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。 -第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。 -推荐的做法是尽量用客户端<em>实现</em>,客户端<em>实现</em>复杂的直接用服务器端<em>实现</em>。 +目前ExtAspNetAjax的限制。 -只对ExtAspNet控件起作用,对<em>Asp.net</em>控件不起作用。 -对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。 -对改变控件的Visible属性会有错误。 -Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。 -PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。[fixed] -Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed] -Grid选中行的状态在第一次回发时不能保持的BUG。[fixed] +2008-08-26 v1.0 +已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。 -主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。 +优化弹出窗口中IFrame的显示速度。[fixed] -在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。 -PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor="#CADDF7",以便分隔符的颜色和Toolbar的颜色一致)[fixed] +PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed] -一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。 -TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed] +TabStrip中非当前Tab会延迟渲染。[fixed] -这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染时间。 -由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。 -不能比较两个DataPicker大小的BUG。[fixed] -TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed] -全新的ExtAspNet.Examples(基础知识/<em>表单</em>控件/数据绑定/容器布局/IFrame框架)。[fixed] +2008-08-19 v0.4 beta6 +PageManager增加两个属性(EnableInlineStyleJavascript/ApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe/default.aspx和iframe/page3.aspx)。[fixed] -测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。 -RadioButtonList放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed] +extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6/IE7)(http://www.extjs.net/forum/showthread.<em>php</em>?t=43246)(示例在test.aspx)[fixed] -现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true; +需要先回发页面再弹出IFrame窗口。[fixed] -在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。 -另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference("./simpleform.aspx"));。 +2008-08-15 v0.4 beta5 -点击关闭窗口的按钮,在IE6下会有JS错误。[fixed] -增加BorderLayout控件,示例在iframe/borderlayout.aspx。[fixed] +Radiobuttonlist显示有重影(示例在radio.aspx)。[fixed] -全新的样式。 -去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。 -GetValueReference取得的值不正确的BUG。 -动态向Form中添加FormRow,并动态的向FormRow中添加<em>表单</em>字段,以及如何取得<em>表单</em>字段的值。(示例在form_dynamic.aspx)[fixed] +IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed] -这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。 -现在"是否弹出窗口、窗口标题、IFrameUrl"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx) +2008-08-13 v0.4 beta4 -点击关闭窗口的按钮,在IE下会有JS错误。[fixed] -Window的右上角关闭图标增加提示,优化事件响应。[fixed] -Window的代码重构。[fixed] +修正一个的内存泄漏。[fixed] -IE7下测试,打开iframe/default.aspx页面,iexplorer占内存68.368M。 -内存存在泄漏时,点击iframe/page3.aspx页面8次后iexplorer占118.792M内存。 -修正后,点击iframe/page3.aspx页面8次后iexplorer占76.492M内存。 -IE窗口最小化时,IE会自动进行垃圾回收。 +2008-08-12 v0.4 beta3 -底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed] -Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight="true"解决)。[fixed] +页面正在加载的提示尽早的显示出来。[fixed] -首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。 -加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。 +2008-08-08 v0.4 beta2 -TabStrip延时加载出错。[fixed] -Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为./FE_ApplyEditor.aspx或~/Pages_ExtAspNet/FE_ApplyEditor.aspx。[fixed] -Window的WindowPosition="Center"并且Target="_parent",则会JS错误。[fixed] -<em>实现</em>网报首页下拉菜单和左侧菜单的导航功能。[fixed] -Window的创建在页面显示后进行,不计算在js渲染时间内。[fixed] -优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed] -button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。[fixed] -Window中的保存并关闭按钮和<em>Asp.net</em>Ajax冲突。[fixed] -优化关闭Window的js脚本,减少写到页面的js大小。[fixed] -加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed] +2008-08-05 v0.4 beta1 -DropDownList去除Traditional属性,和传统的<em>Asp.net</em>控件一样不可编辑。[fixed] -DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。[fixed] -为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed] -将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。[fixed] +弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed] -因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。 -一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。 -另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中<em>表单</em>内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx/simpleform.aspx)。 +PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed] -这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。 -每个页面必须添加一个PageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。[fixed] -TextField等<em>表单</em>字段增加Readonly属性。[fixed] +全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和<em>Asp.net</em> Ajax保持兼容)。[fixed] -最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe文件夹下) +示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx/page2.aspx/simpleform.aspx) -虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加一个属性(Target="_parent"),就完成了两种框架的转换,是不是很酷。 -显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)/page2.aspx(B)/simpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。 -示例2,Grid中弹出窗口。(default.aspx/page3.aspx/simpleform.aspx) +示例3,TriggerBox弹出窗口。(default.aspx/triggerbox.aspx/simpleform.aspx) -在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。 -示例4,弹出窗口中的弹出窗口。 -对整个Examples更新测试。[fixed] +2008-07-31 v0.3 beta12 -IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed] -对TabStrip/Panel/Window中的IFrame重新设计,如果设置IFrameUrl="#"或者"about:blank",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。[fixed] -如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed] -Tree控件,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed] +规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx/simpleform.aspx)。[fixed] -内部<em>实现</em>上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。 -参照Yslow的评分规则,将JS文件引用由head移动到body中。[fixed] -Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed] +IFrame内的页面宽度和高度会自动设置(是不是还在为1px/2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx/simpleform.aspx/simpleform2.aspx)[fixed] -增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE/Firefox)。 +2008-07-24 v0.3 beta11 -web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局<em>表单</em>字段距离右边界的宽度,同时每个<em>表单</em>字段都增加OffsetRight属性 [feedback:jima]。[fixed] -Window在回发时设置的Title不起作用的BUG。[fixed] -增加Image控件 [feedback:jima]。[fixed] -Tree控件,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed] -Image增加ToolTipTitle/ToolTipAutoHide两个属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed] -去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed] -过滤提示消息中的换行符(转换为),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed] +2008-07-23 v0.3 beta10 +完善Tree控件。[fixed] -如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。 -ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。 -更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。 -Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码![fixed] -Grid所有类型的列增加DataTooltipField/DataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。[fixed] +2008-07-22 v0.3 beta9 +IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed] -发现原来ie6不能正确解析li的高度,必须手工设置才行(style="height:20px;")。 +IE6/IE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed] -虽然最后未能解决##差旅交通费在IE和Firefox下显示的不同效果。 -但是通过用来代替,从而<em>实现</em>FF和IE下样式的统一。 -刚看到old9的解决方案:把“差旅交通费”改成“差旅交通费”,在IE下和FF下的都不换行,:-) -LinkButton增加OnClick事件 [feedback:huihuang]。[fixed] -Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed] +增加树控件(Tree)(示例在tree2.aspx)。[fixed] -可以在回发时维持树的状态(选中行,折叠/展开,CheckBox)。 -可以通过Inline的方式添加树节点,也可以绑定到XmlDocument/XmlDataSource/SiteMap。 -点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。 +2008-07-16 v0.3 beta8 +ContentPanel中放置ExtAspNet控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed] -隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。 -现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局<em>实现</em>),只要超过Grid容器就会显示滚动条。 +IE6下,在应用<em>Asp.Net</em>Ajax后,Form中字段的宽度渲染不正确。[fixed] -调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。 -最后发现IE6下应用<em>Asp.Net</em>Ajax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG: 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有<em>表单</em>的宽度(box_fixFormWidthInIE6();): 示例在 Site.Master 页面。 +集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了![fixed] -解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();), 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。 +2008-07-14 v0.3 beta6 -增加FlashObject控件。[fixed] -PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed] -Accordion选中样式微调。[fixed] -预加载Form<em>表单</em>出错时提示信息的背景图片。[fixed] +Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed] -因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置"EnableDelayRender=false"。 -改变Grid中静态的CheckBoxField图片。[fixed] -TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击一个Tab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed] +2008-07-12 v0.3 beta5 -页面菜单Toolbar的分割符和背景不相融合。[fixed] -<em>表单</em>字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed] -如果是同种类型的<em>表单</em>字段,不需要指定CompareType,比如两个NumberBox比较值的大小不需要指定CompareType,而一个NumberBox和TextBox比较大小需要指定CompareType。 +如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx/ajax_editor.aspx)。[fixed] -这是由于ajax后执行的javascript中不能有return false语句。 +在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [feedback:xmzhu]。[fixed] -在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。 -弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是"#"。[fixed] +弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed] -原来的调用方法太麻烦(见示例中alert\alert_1.aspx和alert\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。 -点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed] +增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed] -增加SplitButton控件。[fixed] +2008-07-09 v0.3 beta4 -DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed] +Form<em>表单</em>字段(TextBox,DropDownList...)之间可以比较大小 [feedback:huihuang]。[fixed] -增加ControlToCompare/ValueToCompare/CompareOperator/CompareMessage四个属性,示例在form_compare.aspx。 +TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed] -特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。 -RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed] -FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed] +<em>表单</em>字段Enable=false时显示颜色太浅 [feedback:jima]。[fixed] -覆盖缺省样式的.x-item-disabled,设置不透明。 +2008-07-08 v0.3 beta3 -Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed] +增加HiddenField控件。[fixed] -其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle="display:none;"即可。 +TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。[fixed] -最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。 -模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed] +控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。[fixed] -增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。 -LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed] +2008-07-07 v0.3 beta2 +增加UpdatePanelConnector控件,支持在布局构建的页面使用<em>Asp.net</em> Ajax。[fixed] -使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。 -示例在ajax3.aspx/content_page4.aspx。 -示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。 +2008-07-03 v0.3 beta1 +容器控件的AutoHeight/AutoWidth默认为false。[fixed] -使用GroupPanel的地方需要手工添加AutoHeight="true"属性。 +增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。[fixed] -也可以在ContentPanel中放置用户控件,注意两者的区别。 +增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed] +支持<em>Asp.net</em> ajax异步加载。[fixed] -有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx/content_ajax2.aspx中。 -对于使用布局构建的页面(比如content_page1.aspx)还不能使用<em>Asp.net</em> ajax,因为页面是整体渲染的,先放弃。 +2008-07-02 v0.2 beta12 +关闭前提示当前页面已经被修改(示例在content_page1.aspx/simpleform.aspx)[fixed] -支持Iframe内按钮和window右上角关闭按钮。 -删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。 +iframe中的alert/confirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed] -在Firefox下还有问题。[fix pending] +排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed] -可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。 -可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。 +HyperLinkField/WindowField的链接地址支持服务器端格式(即是~/alert.aspx)。[fixed] -TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed] -可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。[fixed] +2008-06-30 v0.2 beta11 -增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。[fixed] -Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录时总记录数不会变化 [feedback:zgjiang2]。[fixed] -关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed] -如果<em>表单</em>验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。[fixed] +页面中任意可输入<em>表单</em>字段发生变化,可提示先保存。(示例在content_page1.aspx/simpleform.aspx)[fixed] -目前还不支持Window右上角关闭按钮的提示保存功能。 -Master/Content的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed] -Grid中的LinkButtonField设置ConfirmText会出错 [feedback:huihuang]。[fixed] -增加静态类Confirm。[fixed] +2008-06-27 v0.2 beta10 +Grid完善。[fixed] -CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。 -Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。 -切换分页时清空选中的值 [feedback:jqpeng]。 -增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。 -DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。 +2008-06-25 v0.2 beta9 +Window窗体中的</a></div></div></div></div> <div class="public_pc_right_footer2020" style="display:none;" data-v-4a5a7f56></div></div> <div id="right-floor-user-content_562" data-editor="{"type":"floor","pageId":143,"floorId":562}" class="user-right-floor right-box main-box detail-user-right" data-v-229a00b0><div class="__vuescroll" style="height:100%;width:100%;padding:0;position:relative;overflow:hidden;"><div class="__panel __hidebar" style="position:relative;box-sizing:border-box;height:100%;overflow-y:hidden;overflow-x:hidden;transform-origin:;transform:;"><div class="__view" style="position:relative;box-sizing:border-box;min-width:100%;min-height:100%;"><!----><div comp-data="[object Object]" baseInfo="[object Object]" community="[object Object]" class="introduce" data-v-4722a3ae><div class="introduce-title" data-v-4722a3ae><div class="img-info" data-v-4722a3ae><a href="https://bbs.csdn.net/forums/DotNET" class="community-img" data-v-4722a3ae><img src="https://img-community.csdnimg.cn/avatar/745f64491f2744dcbce3cd7127270b93.png?x-oss-process=image/resize,m_fixed,h_88,w_88" alt data-v-4722a3ae> <div title=".NET社区" class="community-name" data-v-4722a3ae> .NET社区 </div></a></div></div> <div class="content" data-v-4722a3ae><div class="detail" data-v-4722a3ae><div title="62046" class="item" data-v-4722a3ae><p class="num" data-v-4722a3ae> 62,046 </p> <p class="desc" data-v-4722a3ae> 社区成员 </p></div> <div title="669049" class="item" data-v-4722a3ae><a href="https://bbs.csdn.net/forums/DotNET" target="_blank" data-v-4722a3ae><p class="num" data-v-4722a3ae> 669,049 </p> <p class="desc" data-v-4722a3ae> 社区内容 </p></a></div></div> <div class="detail-btns" data-v-4722a3ae><div class="community-ctrl-btns_wrapper" data-v-0ebf603c data-v-4722a3ae><div class="community-ctrl-btns" data-v-0ebf603c><div class="community-ctrl-btns_item" data-v-0ebf603c><div data-v-160be461 data-v-0ebf603c><div data-report-click="{"spm":"3001.5975"}" data-v-160be461><img src="https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png" alt="" class="img sendTopic" data-v-160be461 data-v-0ebf603c> <span data-v-160be461 data-v-0ebf603c>发帖</span></div> <!----> <!----></div></div><div class="community-ctrl-btns_item" data-v-0ebf603c><div data-v-0ebf603c><img src="https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png" alt="" class="img me" data-v-0ebf603c> <span data-v-0ebf603c>与我相关</span></div></div><div class="community-ctrl-btns_item" data-v-0ebf603c><div data-v-0ebf603c><img src="https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png" alt="" class="img task" data-v-0ebf603c> <span data-v-0ebf603c>我的任务</span></div></div><div class="community-ctrl-btns_item" data-v-0ebf603c><div class="community-share" data-v-4ca34db9 data-v-0ebf603c><div class="handle-item share" data-v-ca030a68 data-v-4ca34db9><span height="384" data-v-ca030a68><div role="tooltip" id="el-popover-174" aria-hidden="true" class="el-popover el-popper popo share-popover" style="width:265px;display:none;"><!----><div id="tool-QRcode" class="QRcode" data-v-ca030a68><img src="https://csdnimg.cn/release/cmsfe/public/img/shareBg5.9eaaa691.png" alt="" class="share-bg" data-v-ca030a68> <div class="share-bg-box" data-v-ca030a68><div class="share-content" data-v-ca030a68><img src="https://img-community.csdnimg.cn/avatar/745f64491f2744dcbce3cd7127270b93.png?x-oss-process=image/resize,m_fixed,h_88,w_88" alt="" class="share-avatar" data-v-ca030a68> <div class="share-tit" data-v-ca030a68>.NET社区</div> <div class="share-dec" data-v-ca030a68>.NET技术交流专区</div> <span class="copy-share-url" data-v-ca030a68>复制链接</span> <div class="shareText" data-v-ca030a68> </div></div> <div class="share-code" data-v-ca030a68><div class="qrcode" data-v-ca030a68></div> <div class="share-code-text" data-v-ca030a68>扫一扫</div></div></div></div> </div><span class="el-popover__reference-wrapper"><div data-v-0ebf603c><img src="https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png" alt="" class="img share" data-v-0ebf603c> <span data-v-0ebf603c>分享</span></div></span></span></div> <!----></div></div></div> <!----> <div data-v-4fb59baf data-v-0ebf603c><div class="el-dialog__wrapper ccloud-pop-outer2" style="display:none;" data-v-4fb59baf><div role="dialog" aria-modal="true" aria-label="dialog" class="el-dialog el-dialog--center" style="margin-top:15vh;width:70%;"><div class="el-dialog__header"><span class="el-dialog__title"></span><!----></div><!----><div class="el-dialog__footer"><span class="dialog-footer clearfix" data-v-4fb59baf><div class="confirm-btm fr" data-v-4fb59baf>确定</div></span></div></div></div></div></div></div></div> <div style="display:none;" data-v-4722a3ae data-v-4722a3ae><!----> <div class="introduce-desc" data-v-4722a3ae><div class="introduce-desc-title" data-v-4722a3ae>社区描述</div> <span data-v-4722a3ae> .NET技术交流专区 </span></div></div> <div class="introduce-text" data-v-4722a3ae><div class="label-box" data-v-4722a3ae><span class="label" data-v-4722a3ae>javascript</span><span class="label" data-v-4722a3ae>云原生</span> <span class="label" data-v-4722a3ae>企业社区</span> <!----></div></div> <!----> <div class="manage" data-v-4722a3ae><div class="manage-inner" data-v-4722a3ae><span data-v-4722a3ae>社区管理员</span> <ul data-v-4722a3ae><li data-v-4722a3ae><a href="https://blog.csdn.net/community_93" target="_blank" class="start-img" data-v-4722a3ae><img src="https://profile-avatar.csdnimg.cn/default.jpg!1" alt="ASP.NET" class="el-tooltip item" data-v-4722a3ae data-v-4722a3ae></a></li><li data-v-4722a3ae><a href="https://blog.csdn.net/dotnetconf" target="_blank" class="start-img" data-v-4722a3ae><img src="https://profile-avatar.csdnimg.cn/default.jpg!1" alt=".Net开发者社区" class="el-tooltip item" data-v-4722a3ae data-v-4722a3ae></a></li><li data-v-4722a3ae><a href="https://blog.csdn.net/weixin_41960540" target="_blank" class="start-img" data-v-4722a3ae><img src="https://profile-avatar.csdnimg.cn/aa17748a52c84d88ba031f9895a4ea32_weixin_41960540.jpg!1" alt="R小R" class="el-tooltip item" data-v-4722a3ae data-v-4722a3ae></a></li></ul></div></div> <div class="actions" data-v-4722a3ae><!----> <div style="flex:1;" data-v-4722a3ae><div class="join-btn" data-v-4722a3ae> 加入社区 </div></div> <!----> <!----></div> <div class="el-dialog__wrapper" style="display:none;" data-v-38c57799 data-v-4722a3ae><div role="dialog" aria-modal="true" aria-label="获取链接或二维码" class="el-dialog join-qrcode-dialog" style="margin-top:15vh;width:600px;"><div class="el-dialog__header"><span class="el-dialog__title">获取链接或二维码</span><button type="button" aria-label="Close" class="el-dialog__headerbtn"><i class="el-dialog__close el-icon el-icon-close"></i></button></div><!----><div class="el-dialog__footer"><span class="dialog-footer" data-v-38c57799></span></div></div></div> <div class="collapse-btn" data-v-4722a3ae><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAAAgCAYAAACFM/9sAAAAAXNSR0IArs4c6QAAAi1JREFUaEPtl01u01AUhc+N8wMSO4AxzJAqwQpKQsdtbMOICmKnwCKQ2ACDIgotrYKiduIiVZ10B0CBAjtAbICfooomJr3IcUoTiVLb15GNuG/67nm65/M5AxP0iAiQSK1iKEBhCBSgAhQSEMo1gQpQSEAo1wQqQCEBoVwT+K8CnLnWvER8cOHMaf95q9Xaj+vDtp3LPeD83u6p9a2t+U5cfVrzmSTQNOfOgg4+ATDAeNHp/Jza3Fz5HtWUZbl3GXjYn2e+53lL96Nq057LBOD0dOOcUSx8BFAcGHpZLlWmVlfnd08yaJrubRAe/Z77HwEG5kdS1E8StgFc9bzFb8dBrNtukxgLwOAXNEF6T/pAce8zSeDhknXbuUNMQRUHe/BrMNX+BNGyHIdBT45m6VVn36/FqX5cOFHmMwUYJrE5x+CgkuEujLe+361ubLS+HhowzeYtEC8NzWyXy5ValMpHgSCZyRxgsLxpui4Ij4/ShZ1S0aiurS18sSznJoOeDt29AaP6t6pLgMTV5gJgsHTddhvEWBwC9Y6AZww8AFA4Lp1xDac9nxuAYZ37aQuqGgIbPTt+t3tluNppw0jyXq4AhnV2ZkG0PAKR8b5UMiaDSicxOU5N7gCGSXRvMLAygPgB3Jv0vOXP4wSR9O1cAgzMzFxvXDR6hYlK5cd6u93eS2pw3LrcAhy38bTeV4BCkgpQAQoJCOWaQAUoJCCUawIVoJCAUK4JVIBCAkL5L1yapyGdIBwvAAAAAElFTkSuQmCC" alt data-v-4722a3ae></div></div><!----><!----><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="floor-user-right-rank" data-v-3d3affee><div class="el-tabs el-tabs--top" data-v-3d3affee><div class="el-tabs__header is-top"><div class="el-tabs__nav-wrap is-top"><div class="el-tabs__nav-scroll"><div role="tablist" class="el-tabs__nav is-top" style="transform:translateX(-0px);"><div class="el-tabs__active-bar is-top" style="width:0px;transform:translateX(0px);ms-transform:translateX(0px);webkit-transform:translateX(0px);"></div></div></div></div></div><div class="el-tabs__content"><div role="tabpanel" id="pane-integral" aria-labelledby="tab-integral" class="el-tab-pane" data-v-3d3affee></div><div role="tabpanel" aria-hidden="true" id="pane-3" aria-labelledby="tab-3" class="el-tab-pane" style="display:none;" data-v-3d3affee></div><div role="tabpanel" aria-hidden="true" id="pane-5" aria-labelledby="tab-5" class="el-tab-pane" style="display:none;" data-v-3d3affee></div><div role="tabpanel" aria-hidden="true" id="pane-6" aria-labelledby="tab-6" class="el-tab-pane" style="display:none;" data-v-3d3affee></div></div></div> <div class="floor-user-right-rank-score" data-v-608528ce data-v-3d3affee><div class="floor-user-right-rank-score-tabs" data-v-608528ce><ul data-v-608528ce><li data-v-608528ce> 近7日 </li><li data-v-608528ce> 近30日 </li><li class="active" data-v-608528ce> 至今 </li></ul></div> <div class="floor-user-right-rank-common" data-v-46cf600d data-v-608528ce><div class="rank-list" data-v-46cf600d><!----> <div class="no-data loading" data-v-46cf600d><i class="el-icon-loading" data-v-46cf600d></i> <p data-v-46cf600d>加载中</p></div> <!----> <a href="https:///DotNET/rank/list/total" target="_blank" class="show-more" data-v-46cf600d> 查看更多榜单 </a></div></div></div></div><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="floor comunity-rule" data-v-3cfa4dbd><div class="title" data-v-3cfa4dbd> 社区公告 </div> <div class="contain" data-v-3cfa4dbd><div class="inner-content" data-v-3cfa4dbd><p>.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。</p> <p>希望和大家一起共同营造一个活跃、友好的社区氛围。</p> </div></div></div><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="user-right-adimg empty-arr" data-v-15c6aa4f><div class="adImgs" data-v-2a6389b9 data-v-15c6aa4f><!----> <div data-v-2a6389b9><!----></div></div></div><div comp-data="[object Object]" baseInfo="[object Object]" community="[object Object]" class="content-right-recommend" data-v-0f781e88><div data-v-3798762e data-v-0f781e88><!----> <!----></div></div><div comp-data="[object Object]" baseInfo="[object Object]" typePage="detail" community="[object Object]" class="ai-entrance" data-v-eb1c454c><p data-v-eb1c454c>试试用AI创作助手写篇文章吧</p> <div class="entrance-btn-line" data-v-eb1c454c><a href="https://mp.csdn.net/edit?guide=1" target="_blank" data-report-click="{"spm":"3001.9712"}" data-report-query="spm=3001.9712" class="entrance-btn" data-v-eb1c454c>+ 用AI写文章</a></div></div></div></div></div></div></div></div></div></div></div></div></div> <div> <script type="text/javascript" src="https://g.csdnimg.cn/common/csdn-footer/csdn-footer.js" data-isfootertrack="false" defer></script> </div></div></div><script> window.__INITIAL_STATE__= {"csrf":"HUgoHx2P-tLXv75jCvAkkWMgSKCq4giwvjsU","origin":"http:\u002F\u002Fbbs.csdn.net","isMobile":false,"cookie":"uuid_tt_dd=10_3145190760-1713862001341-864086;","ip":"18.191.46.36","pageData":{"page":{"pageId":143,"title":"社区详情","keywords":"社区详情","description":"社区详情","ext":{"isMd":"true","armsfe1":"{pid:\"dyiaei5ihw@1a348e4d05c2c78\",appType:\"web\",imgUrl:\"https:\u002F\u002Farms-retcode.aliyuncs.com\u002Fr.png?\",sendResource:true,enableLinkTrace:true,behavior:true}","redPacketCfg":"{\"presetTitle\":[\"成就一亿技术人!\",\"大吉大利\",\"节日快乐\",\"Bug Free\",\"Hello World\",\"Be Greater Than Average!!\"],\"defaultTitle\":\"成就一亿技术人!\",\"preOpenSty\":{},\"redCardSty\":{}}","blogStar":"[{\"year\":\"2021\",\"enable\":true,\"communityIds\":[3859],\"url\":\"https:\u002F\u002Fbbs.csdn.net\u002Fsummary2021\"},{\"year\":\"2022\",\"enable\":true,\"communityIds\":[3860],\"url\":\"https:\u002F\u002Fbbs.csdn.net\u002Fsummary2022\"}]","mdVersion":"https:\u002F\u002Fcsdnimg.cn\u002Frelease\u002Fmarkdown-editor\u002F1.1.0\u002Fmarkdown-editor.js","componentSortCfg":"{ \"right\":[\"ratesInfo\",\"cty-profile\",\"pub-comp\",\"user-right-introduce\",\"post-event\",\"my-mission\",\"user-recommend\",\"user-right-rank\",\"user-right-rule\",\"user-right-adimg\"] }","show_1024":"{\"enable\":false,\"useWhitelist\":false,\"whitelist\":[76215],\"home\":\"https:\u002F\u002F1111.csdn.net\u002F\",\"logo\":\"https:\u002F\u002Fimg-home.csdnimg.cn\u002Fimages\u002F20221104102741.png\",\"hideLive\":true}","iframes":"[\"3859\"]","pageCfg":"{\"disableDownloadPDF\": false,\"hideSponsor\":false}"}},"template":{"templateId":71,"templateComponentName":"ccloud-detail","title":"ccloud-detail","floorList":[{"floorId":562,"floorComponentName":"floor-user-content","title":"社区详情页","description":"社区详情页","indexOrder":3,"componentList":[{"componentName":"baseInfo","componentDataId":"cloud-detail1","componentConfigData":{},"relationType":3},{"componentName":"user-right-introduce","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-recommend","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-right-rank","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-right-rule","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"user-right-adimg","componentDataId":"","componentConfigData":{},"relationType":2},{"componentName":"default2014LiveRoom","componentDataId":"20221024DefaultLiveRoom","componentConfigData":{},"relationType":3}]}]},"data":{"baseInfo":{"customDomain":"","uriName":"DotNET","communityHomePage":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET","owner":{"userName":"community_93","nickName":"ASP.NET","avatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","position":"","companyName":""},"user":{"userRole":3,"userName":null,"nickName":null,"avatarUrl":null,"rank":null,"follow":2,"communityBase":null,"joinCollege":null,"isVIP":null},"community":{"name":".NET社区","description":".NET技术交流专区","avatarUrl":"https:\u002F\u002Fimg-community.csdnimg.cn\u002Favatar\u002F745f64491f2744dcbce3cd7127270b93.png?x-oss-process=image\u002Fresize,m_fixed,h_88,w_88","qrCode":"","createTime":"2007-09-28","communityAvatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","communityNotice":null,"userCount":62046,"contentCount":669049,"followersCount":49818,"communityRule":"\u003Cp\u003E.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。\u003C\u002Fp\u003E\n\n\u003Cp\u003E希望和大家一起共同营造一个活跃、友好的社区氛围。\u003C\u002Fp\u003E\n","communityId":211,"bgImage":"","hashId":"2lwpzdnk","domain":"","uriName":"DotNET","externalDisplay":1,"adBanner":{"img":"","url":"","adType":0,"adCon":null},"rightBanner":{"img":"","url":"","adType":0,"adCon":null},"tagId":null,"tagName":null,"communityType":2,"communityApplyUrl":"https:\u002F\u002Fmarketing.csdn.net\u002Fquestions\u002FQ2106040308026533763","joinType":0,"visibleType":0,"collapse":0,"topicMoveAble":0,"allowActions":{},"communityOwner":"community_93","tagNameInfo":{"provinceTag":null,"areaTag":null,"technologyTags":[{"id":190,"name":"javascript"},{"id":400064,"name":"云原生"}],"customTags":[{"id":1,"name":"企业社区"}]}},"tabList":[{"tabId":862,"tabName":"问答","tabUrl":"https:\u002F\u002Fask.csdn.net\u002Flist\u002F3\u002Ftag\u002F576","tabSwitch":1,"tabType":0,"tabContribute":0,"indexOrder":0,"iframe":true,"sortType":1},{"tabId":20680,"tabName":".NET Conf China","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":1,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=20680","iframe":false,"sortType":1},{"tabId":1370,"tabName":"全部","tabUrl":"","tabSwitch":1,"tabType":4,"tabContribute":0,"cardType":0,"indexOrder":2,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=1370","iframe":false,"sortType":1},{"tabId":420,"tabName":"招聘","tabUrl":"","tabSwitch":1,"tabType":3,"tabContribute":0,"indexOrder":3,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=420","iframe":false,"sortType":1},{"tabId":23493,"tabName":"社区公告","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":3,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=23493","iframe":false,"sortType":1},{"tabId":22149,"tabName":"寻找 .NET 技术达人","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":4,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=22149","iframe":false,"sortType":1},{"tabId":714,"tabName":".NET Framework","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":5,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=714","iframe":false,"sortType":1},{"tabId":21249,"tabName":".NET Core","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":6,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21249","iframe":false,"sortType":1},{"tabId":21248,"tabName":"微服务","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":7,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21248","iframe":false,"sortType":1},{"tabId":21250,"tabName":".NET5 \u002F 6","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":8,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21250","iframe":false,"sortType":1},{"tabId":21498,"tabName":".NET技术前瞻","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":9,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21498","iframe":false,"sortType":1},{"tabId":21500,"tabName":"VC","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":10,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21500","iframe":false,"sortType":1},{"tabId":21499,"tabName":".NET技术其他语言","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":11,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21499","iframe":false,"sortType":1},{"tabId":21251,"tabName":"ASP_NET","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":12,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21251","iframe":false,"sortType":1},{"tabId":21253,"tabName":"EF","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":13,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21253","iframe":false,"sortType":1},{"tabId":21254,"tabName":"EF Core","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":14,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21254","iframe":false,"sortType":1},{"tabId":715,"tabName":"Web Services","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":15,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=715","iframe":false,"sortType":1},{"tabId":717,"tabName":"桌面应用","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":16,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=717","iframe":false,"sortType":1},{"tabId":716,"tabName":"VB","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":17,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=716","iframe":false,"sortType":1},{"tabId":718,"tabName":"图表区","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":18,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=718","iframe":false,"sortType":1},{"tabId":21258,"tabName":"前端","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":19,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21258","iframe":false,"sortType":1},{"tabId":4055689,"tabName":"博文收录","tabUrl":"","tabSwitch":1,"tabType":2,"tabContribute":0,"cardType":0,"indexOrder":19,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=4055689","iframe":false,"sortType":1},{"tabId":719,"tabName":"分析与设计","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":20,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=719","iframe":false,"sortType":1},{"tabId":1638782,"tabName":"Ada助手","tabUrl":"","tabSwitch":1,"tabType":2,"tabContribute":0,"cardType":0,"indexOrder":20,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=1638782","iframe":false,"sortType":1},{"tabId":720,"tabName":"组件\u002F控件开发","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":21,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=720","iframe":false,"sortType":1},{"tabId":721,"tabName":"AppLauncher","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":22,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=721","iframe":false,"sortType":1},{"tabId":21252,"tabName":"圈内交友","tabUrl":"","tabSwitch":1,"tabType":1,"tabContribute":1,"cardType":0,"indexOrder":23,"url":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET?typeId=21252","iframe":false,"sortType":1}],"dataResource":{"mediaType":"c_cloud","subResourceType":"8_c_cloud_long_text","showType":"long_text","tabId":0,"communityName":".NET社区","communityHomePageUrl":"https:\u002F\u002Fbbs.csdn.net\u002Fforums\u002FDotNET","communityType":2,"content":{"id":"360134776","contentId":360134776,"cateId":0,"cateName":null,"url":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F360134776","shareUrl":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F360134776","createTime":"2011-04-04 09:34:22","updateTime":"2021-05-28 18:11:08","resourceUsername":"beckfun","best":0,"top":0,"text":null,"publishDate":"2011-04-04","lastReplyDate":"2011-04-07","type":"13","nickname":"beckfun","avatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F0e322db51eec438ba522f4c99c59401c_beckfun.jpg!1","username":"beckfun","commentCount":42,"diggNum":0,"digg":false,"viewCount":374,"hit":false,"resourceSource":6,"status":10,"taskStatus":null,"expired":false,"taskCate":0,"taskAward":0,"taskExpired":null,"checkRedPacket":null,"avgScore":0,"totalScore":0,"topicTitle":"asp.net如何实现php表单数组?","insertFirst":false,"likeInfo":null,"description":"不知不觉又升了个裤衩,散粉,顺带问个问题(可能过于理想) 在不用GridView等服务器控件以及AJAX的情况下,也就是页面一个table然后通过JS来添加tr tr内的格式固定,输入完信息,提交,接受使用request.from 我看到PHPWIND使用的是页面表单内的name使用的是***[***],也查了相关PHP文档,说是表单数组, 不知道是否有方法把其转成ASP.NET 不知我想法是否太过理想?! 示例 \u003Cinput na","coverImg":"https:\u002F\u002Fimg-home.csdnimg.cn\u002Fimages\u002F20221026061834.png","content":"不知不觉又升了个裤衩,散粉,顺带问个问题(可能过于理想)\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n在不用GridView等服务器控件以及AJAX的情况下,也就是页面一个table然后通过JS来添加tr tr内的格式固定,输入完信息,提交,接受使用request.from\u003Cbr \u002F\u003E\n我看到PHPWIND使用的是页面表单内的name使用的是***[***],也查了相关PHP文档,说是表单数组,\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n不知道是否有方法把其转成ASP.NET\u003Cbr \u002F\u003E\n不知我想法是否太过理想?!\u003Cbr \u002F\u003E\n示例\u003Cbr \u002F\u003E\n\u003Cpre\u003E\u003Ccode class=\"language-HTML\"\u003E\u003Cbr \u002F\u003E\n<input name="a[1]" value="1" \u002F>\u003Cbr \u002F\u003E\n<input name="a[2]" value="2" \u002F>\u003Cbr \u002F\u003E\n<input name="a[3]" value="3" \u002F>\u003Cbr \u002F\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003Cbr \u002F\u003E\n我现在不是要规规矩矩的写三个request.form["a[1]"],request.form["a[2]"],request.form["a[3]"]\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n如果我想法太过天真太过理想..也不要拍我..权当我散粉帖..哇哈哈..只能发200分帖","mdContent":null,"pictures":null,"videoInfo":null,"linkInfo":null,"student":{"isCertification":false,"org":"","bala":""},"employee":{"isCertification":false,"org":"","bala":""},"userCertification":[],"dependId":"0","dependSubType":null,"videoUrl":null,"favoriteCount":0,"favoriteStatus":false,"taskType":null,"defaultScore":null,"syncAsk":false,"videoPlayLength":null},"communityUser":{"userName":"beckfun","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"allowPost":false,"submitHistory":[{"user":{"registerurl":"https:\u002F\u002Fg.csdnimg.cn\u002Fstatic\u002Fuser-reg-year\u002F1x\u002F16.png","avatarurl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F0e322db51eec438ba522f4c99c59401c_beckfun.jpg!1","nickname":"beckfun","selfdesc":"学校还没毕业","createdate":"2007-11-08 21:10:00","days":"6011","years":"16","username":"beckfun","school":null,"company":null,"job":null},"userName":"beckfun","event":"创建了帖子","body":"2011-04-04 09:34","editId":null}],"resourceExt":{}},"contentReply":{"pageNo":1,"pageSize":20,"totalPages":1,"totalCount":32,"total":0,"list":[{"hit":null,"hitMsg":null,"content":"在来几层结贴了....","topicTitle":null,"description":"在来几层结贴了....","id":370466313,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"beckfun","userNickName":"beckfun","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F0e322db51eec438ba522f4c99c59401c_beckfun.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":1945105874,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-07 12:27:28","updateTime":"2011-04-07 12:27:36","formatTime":"2011-04-07","userRoleHonorary":{"userName":"beckfun","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"Request.Form[]就可以","topicTitle":null,"description":"Request.Form[]就可以","id":370440037,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"happy664618843","userNickName":"happy664618843","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fe514f03a65db47769ce44a7acdb3670e_happy664618843.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":1961296755,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-06 11:10:28","updateTime":"2011-04-06 11:10:37","formatTime":"2011-04-06","userRoleHonorary":{"userName":"happy664618843","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"可以用正则对提交的数据进行处理,来实现PHP的表单数组\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n","topicTitle":null,"description":"可以用正则对提交的数据进行处理,来实现PHP的表单数组 ","id":370437583,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"Sandy945","userNickName":"阿非","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F7847d997516b4d8f94d4fbe9406a7f68_sandy945.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":1022844510,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-06 10:10:29","updateTime":"2011-04-06 10:10:37","formatTime":"2011-04-06","userRoleHonorary":{"userName":"Sandy945","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"你的问题,我一般都用js写的,动态添加tr,接分","topicTitle":null,"description":"你的问题,我一般都用js写的,动态添加tr,接分","id":370437491,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"Jolyloving","userNickName":"刘婷婷","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fc6948cb216ac4d30bcb35b68a0720dc0_jolyloving.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":3549456946,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-06 10:07:55","updateTime":"2011-04-06 10:08:03","formatTime":"2011-04-06","userRoleHonorary":{"userName":null,"roleId":null,"roleType":null,"roleStatus":null,"honoraryId":null,"roleName":null,"honoraryName":null,"communityNickname":null,"communitySignature":null},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"\u003Cbr \u002F\u003E\n把name定义的有规律点。。。\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n用个循环取值。。","topicTitle":null,"description":" 把name定义的有规律点。。。 用个循环取值。。","id":370436410,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"porschev","userNickName":"porschev","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F17bd3ce5f31b4883944bf420843eb2e7_porschev.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":2013207264,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-06 09:38:03","updateTime":"2011-04-06 09:38:11","formatTime":"2011-04-06","userRoleHonorary":{"userName":null,"roleId":null,"roleType":null,"roleStatus":null,"honoraryId":null,"roleName":null,"honoraryName":null,"communityNickname":null,"communitySignature":null},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"规规矩矩接分","topicTitle":null,"description":"规规矩矩接分","id":370435607,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"Purple_Sky2010","userNickName":"Purple_Sky2010","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F430611f65d3046c5941f0ddc9015b953_purple_sky2010.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":2073949822,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-06 09:16:13","updateTime":"2011-04-06 09:16:22","formatTime":"2011-04-06","userRoleHonorary":{"userName":null,"roleId":null,"roleType":null,"roleStatus":null,"honoraryId":null,"roleName":null,"honoraryName":null,"communityNickname":null,"communitySignature":null},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"[Quote=引用 6 楼 dalmeeme 的回复:]\u003Cbr \u002F\u003E\n名字可以起有规律的,这样后台在循环中获取,很方便。\u003Cbr \u002F\u003E\nfor(int i=0;i<10;i++)\u003Cbr \u002F\u003E\n request.form["name"+i.ToString()],\u003Cbr \u002F\u003E\n[\u002FQuote]\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n++ 看到不 错的方法","topicTitle":null,"description":"[Quote=引用 6 楼 dalmeeme 的回复:] 名字可以起有规律的,这样后台在循环中获取,很方便。 for(int i=0;i\u003C10;i++) request.form[\"name\"+i.ToString()], [\u002FQuote] ++ 看到不 错的方法","id":370435382,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"yanimaziba","userNickName":"jeven_xiao","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F592044ac827e4b0bac66a79eb7c61629_yanimaziba.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":1903078926,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-06 09:09:38","updateTime":"2011-04-06 09:09:46","formatTime":"2011-04-06","userRoleHonorary":{"userName":"yanimaziba","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"恩 一般动态添加的话,我都根据规则遍历获取。","topicTitle":null,"description":"恩 一般动态添加的话,我都根据规则遍历获取。","id":370435154,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"tao145","userNickName":"笑道江湖情","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F4c5a198d2c0b4dada68529cee791dd92_tao145.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":3528713219,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-06 09:04:04","updateTime":"2011-04-06 09:04:12","formatTime":"2011-04-06","userRoleHonorary":{"userName":"tao145","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"hebine~~~\u003Cbr \u002F\u003E\nheku ne","topicTitle":null,"description":"hebine~~~ heku ne","id":370434630,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"starfd","userNickName":"娃都会打酱油了","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F093de97143344a099aeb67a5723de298_starfd.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":3663378386,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-06 08:45:14","updateTime":"2011-04-06 08:45:22","formatTime":"2011-04-06","userRoleHonorary":{"userName":null,"roleId":null,"roleType":null,"roleStatus":null,"honoraryId":null,"roleName":null,"honoraryName":null,"communityNickname":null,"communitySignature":null},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"String arr[] = Request.Form.AllKeys;\u003Cbr \u002F\u003E\n循环遍历.","topicTitle":null,"description":"String arr[] = Request.Form.AllKeys; 循环遍历.","id":370434414,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"kingdom_0","userNickName":"kingdom_0","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fff8131792251438ab67914db2c978ee1_kingdom_0.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":3726727810,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-06 08:35:34","updateTime":"2011-04-06 08:35:42","formatTime":"2011-04-06","userRoleHonorary":{"userName":null,"roleId":null,"roleType":null,"roleStatus":null,"honoraryId":null,"roleName":null,"honoraryName":null,"communityNickname":null,"communitySignature":null},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"[Quote=引用 11 楼 huangwenquan123 的回复:]\u003Cbr \u002F\u003E\nHTML code\u003Cbr \u002F\u003E\n <form action="Default13.aspx" method="post">\u003Cbr \u002F\u003E\n <input name="a1" value="1" \u002F>\u003Cbr \u002F\u003E\n <input name="a2" value="2" \u002F>\u003Cbr \u002F\u003E\n <input name="a3" value="3" \u002F>\u003Cbr \u002F\u003E\n <input name="a4" value="4" \u002F>\u003Cbr \u002F\u003E\n……\u003Cbr \u002F\u003E\n[\u002FQuote] .","topicTitle":null,"description":"[Quote=引用 11 楼 huangwenquan123 的回复:] HTML code \u003Cform action=\"Default13.aspx\" method=\"post\"\u003E \u003Cinput name=\"a1\" value=\"1\" \u002F\u003E \u003Cinput name=\"a2\" value=\"2\" \u002F\u003E \u003Cinput name=\"a3\" value=\"3\" \u002F\u003E \u003Cinput name=\"a4\" value=\"4\" \u002F\u003E …… [\u002FQuote] .","id":370434355,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"Ranen2010","userNickName":"小童","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F81260671925b42e3b8b55d23b3adefad_ranen2010.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":3524677599,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-06 08:32:40","updateTime":"2011-04-06 08:32:48","formatTime":"2011-04-06","userRoleHonorary":{"userName":"Ranen2010","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"好久没来论坛逛了,JF","topicTitle":null,"description":"好久没来论坛逛了,JF","id":370426565,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"sfxdawn","userNickName":"sfxdawn","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":986948066,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-05 11:34:00","updateTime":"2011-04-05 11:34:08","formatTime":"2011-04-05","userRoleHonorary":{"userName":"sfxdawn","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"html 写在 js里\u003Cbr \u002F\u003E\nc# 代码 写在cs里","topicTitle":null,"description":"html 写在 js里 c# 代码 写在cs里","id":370426486,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"jason_dct","userNickName":"段传涛","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F559007e9f83842759352937a91a43adf_jason_dct.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":1968133039,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-05 11:26:10","updateTime":"2011-04-05 11:26:19","formatTime":"2011-04-05","userRoleHonorary":{"userName":"jason_dct","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"当然可以了。\u003Cbr \u002F\u003E\nname 是你的数组吧。这样就ok了\u003Cbr \u002F\u003E\n name.Add(new position("1","静静","女","23") );\u003Cbr \u002F\u003E\n name.Add(new position("2", "晶晶", "女", "23"));\u003Cbr \u002F\u003E\n name.Add(new position("3", "小杰", "男", "23"));\u003Cbr \u002F\u003E\n 下面为了 给你测试----------------\u003Cbr \u002F\u003E\n GridView1.DataSource = mylist;\u003Cbr \u002F\u003E\n GridView1.DataBind();\u003Cbr \u002F\u003E\n————————————————————————————————————————————————\u003Cbr \u002F\u003E\n public class position\u003Cbr \u002F\u003E\n {\u003C!-- --\u003E\u003Cbr \u002F\u003E\n private string id;\u003Cbr \u002F\u003E\n private string name;\u003Cbr \u002F\u003E\n private string sex;\u003Cbr \u002F\u003E\n private string age;\u003Cbr \u002F\u003E\n public position(string getid, string getname, string getsex, string getage)\u003Cbr \u002F\u003E\n {\u003C!-- --\u003E\u003Cbr \u002F\u003E\n id = getid;\u003Cbr \u002F\u003E\n name = getname;\u003Cbr \u002F\u003E\n sex = getsex;\u003Cbr \u002F\u003E\n age = getage;\u003Cbr \u002F\u003E\n }\u003Cbr \u002F\u003E\n public string _id\u003Cbr \u002F\u003E\n {\u003C!-- --\u003E\u003Cbr \u002F\u003E\n get { return id; }\u003Cbr \u002F\u003E\n }\u003Cbr \u002F\u003E\n public string _name\u003Cbr \u002F\u003E\n {\u003C!-- --\u003E\u003Cbr \u002F\u003E\n get { return name; }\u003Cbr \u002F\u003E\n }\u003Cbr \u002F\u003E\n public string _sex\u003Cbr \u002F\u003E\n {\u003C!-- --\u003E\u003Cbr \u002F\u003E\n get { return sex; }\u003Cbr \u002F\u003E\n }\u003Cbr \u002F\u003E\n public string _age\u003Cbr \u002F\u003E\n {\u003C!-- --\u003E\u003Cbr \u002F\u003E\n get { return age; }\u003Cbr \u002F\u003E\n }\u003Cbr \u002F\u003E\n }\u003Cbr \u002F\u003E\n }\u003Cbr \u002F\u003E\n--------------------------ok 了 测试下。 \u003Cbr \u002F\u003E\n","topicTitle":null,"description":"当然可以了。 name 是你的数组吧。这样就ok了 name.Add(new position(\"1\",\"静静\",\"女\",\"23\") ); name.Add(new position(\"2\", \"晶晶\", \"女\", \"23\")); name.Add(new position(\"3\", \"小杰\", \"男\", \"23\")); 下面为了 给你测试---------------- GridView1.DataSource = mylist; GridView1.DataBind(); —————————","id":370426475,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"jason_dct","userNickName":"段传涛","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F559007e9f83842759352937a91a43adf_jason_dct.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":1968133039,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-05 11:25:14","updateTime":"2011-04-05 11:25:23","formatTime":"2011-04-05","userRoleHonorary":{"userName":"jason_dct","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"[Quote=引用楼主 beckfun 的回复:]\u003Cbr \u002F\u003E\n在不用GridView等服务器控件以及AJAX的情况下,也就是页面一个table然后通过JS来添加tr tr内的格式固定,输入完信息,提交,接受使用request.from\u003Cbr \u002F\u003E\n我看到PHPWIND使用的是页面表单内的name使用的是***[***],也查了相关PHP文档,说是表单数组,\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n不知道是否有方法把其转成ASP.NET\u003Cbr \u002F\u003E\n不知我想法是否太过理想?!\u003Cbr \u002F\u003E\n示例\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\nHTML code\u003Cbr \u002F\u003E\n……\u003Cbr \u002F\u003E\n[\u002FQuote](table然后通过JS来添加tr tr内的格式固定,输入完信息.....)\u003Cbr \u002F\u003E\n既然这样,我相信你也可以用js获取输入的信息,并利用ajax方式传给后台。","topicTitle":null,"description":"[Quote=引用楼主 beckfun 的回复:] 在不用GridView等服务器控件以及AJAX的情况下,也就是页面一个table然后通过JS来添加tr tr内的格式固定,输入完信息,提交,接受使用request.from 我看到PHPWIND使用的是页面表单内的name使用的是***[***],也查了相关PHP文档,说是表单数组, 不知道是否有方法把其转成ASP.NET 不知我想法是否太过理想?! 示例 HTML code …… [\u002FQuote](table然后通过JS来添加tr tr内的格","id":370426466,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"ssp2009","userNickName":"快溜","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F1c8830f6f5f14f47b8d8dba161f1ca0f_ssp2009.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":22041494,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-05 11:24:37","updateTime":"2011-04-05 11:24:45","formatTime":"2011-04-05","userRoleHonorary":{"userName":"ssp2009","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"直接把数组传过去。\u003Cimg src=\"https:\u002F\u002Fforum.csdn.net\u002FPointForum\u002Fui\u002Fscripts\u002Fcsdn\u002FPlugin\u002F003\u002Fmonkey\u002F5.gif\" alt=\"\" \u002F\u003E","topicTitle":null,"description":"直接把数组传过去。","id":370426372,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"wxr0323","userNickName":"子夜__","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fbf1662d1170347d490fd43084d5189ca_wxr0323.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":1996900379,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-05 11:15:13","updateTime":"2011-04-05 11:15:22","formatTime":"2011-04-05","userRoleHonorary":{"userName":"wxr0323","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"纯粹的数组貌似没有\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n不过通过循环的方式取值 倒是有的","topicTitle":null,"description":"纯粹的数组貌似没有 不过通过循环的方式取值 倒是有的","id":370433040,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"jaylongli","userNickName":"加油馒头","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F467976e2af644c4198e1fce85af01005_jaylongli.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":975326543,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-05 10:58:59","updateTime":"2011-04-05 10:59:07","formatTime":"2011-04-05","userRoleHonorary":{"userName":null,"roleId":null,"roleType":null,"roleStatus":null,"honoraryId":null,"roleName":null,"honoraryName":null,"communityNickname":null,"communitySignature":null},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"jf 。\u003Cbr \u002F\u003E\n还是规规矩矩的好 。","topicTitle":null,"description":"jf 。 还是规规矩矩的好 。","id":370426126,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"zell419","userNickName":"zell419","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Ff8469eacaff6462eaa605252d249ec71_zell419.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":989412421,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-05 10:50:36","updateTime":"2011-04-05 10:50:45","formatTime":"2011-04-05","userRoleHonorary":{"userName":"zell419","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"额..沉下去了....\u003Cimg src=\"https:\u002F\u002Fforum.csdn.net\u002FPointForum\u002Fui\u002Fscripts\u002Fcsdn\u002FPlugin\u002F003\u002Fonion\u002F3.gif\" alt=\"\" \u002F\u003E","topicTitle":null,"description":"额..沉下去了....","id":370426009,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"beckfun","userNickName":"beckfun","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F0e322db51eec438ba522f4c99c59401c_beckfun.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":3662315657,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-05 10:42:12","updateTime":"2011-04-05 10:42:21","formatTime":"2011-04-05","userRoleHonorary":{"userName":"beckfun","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null},{"hit":null,"hitMsg":null,"content":"[Quote=引用 9 楼 taomanman 的回复:]\u003Cbr \u002F\u003E\n\u003Cbr \u002F\u003E\n有些本身可以很好解决的办法为什么不用,非要整出不用这个不用那个来做,能解决问题的办法都是好办法\u003Cbr \u002F\u003E\n[\u002FQuote]\u003Cbr \u002F\u003E\n只是茶余饭后的一种想法,能实现固然是好...实现不了也无关紧要...有很多中方法可以替代","topicTitle":null,"description":"[Quote=引用 9 楼 taomanman 的回复:] 有些本身可以很好解决的办法为什么不用,非要整出不用这个不用那个来做,能解决问题的办法都是好办法 [\u002FQuote] 只是茶余饭后的一种想法,能实现固然是好...实现不了也无关紧要...有很多中方法可以替代","id":370424050,"contentResourceId":360134776,"bindContentResourceId":0,"communityId":211,"username":"beckfun","userNickName":"beckfun","userAvatar":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002F0e322db51eec438ba522f4c99c59401c_beckfun.jpg!1","mdContent":null,"parentId":0,"replyName":"","replyNickName":"","bizNo":"bbs","ip":3662315657,"status":10,"childCount":0,"topStatus":0,"recommendStatus":0,"userLike":false,"diggCount":0,"childIds":"","createTime":"2011-04-04 11:52:18","updateTime":"2011-04-04 11:52:28","formatTime":"2011-04-04","userRoleHonorary":{"userName":"beckfun","roleId":216,"roleType":0,"roleStatus":1,"honoraryId":0,"roleName":"","honoraryName":null,"communityNickname":"","communitySignature":""},"child":null,"communityNickname":null,"communityReplyNickname":null,"rewardInfo":null,"checkRedPacketVO":null,"noDiggCount":null}],"maxPageSize":3000},"defaultActiveTab":20680,"recommends":[{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Ftds13149530\u002F1469387","title":"精通正则表达式基于.NET ASP \u003Cem\u003EPHP\u003C\u002Fem\u003E JSP JavaScript","desc":"1.运行环境\n本书7~10章所附代码的运行环境\n Windows家族,.NET Framework 2.0及以上版本\n IIS 5.0及以上版本\n本书14~16章所附代码的运行环境\n Windows家族,Apache 2.0及以上版本\n \u003Cem\u003EPHP\u003C\u002Fem\u003E 5.0及以上版本\n本书17~18章所附代码的运行环境\n Windows家族,Tomcat\n JDK6.0\n本书19~21章所附代码的调试环境\n IE 6.0及以上版本\n2.调试环境\n本书7~10章所附代码的调试环境\n Windows家族,.NET Framework 2.0及以上版本\n Visual Studio 2005及以上版本、\u003Cem\u003EASP.NET\u003C\u002Fem\u003E 2.0及以上版本\n本书14~16章所附代码的调试环境\n Windows家族,Apache 2.0及以上版本\n \u003Cem\u003EPHP\u003C\u002Fem\u003E 5.0及以上版本\n本书17~18章所附代码的调试环境\n JDK6.0\n Eclipse3.2+Lomboz\n本书19~21章所附代码的调试环境\n IE 6.0及以上版本\n 文本编辑器\n3.本书所附光盘范例\n第7章(\u002F07\u002F)\n DataTypeApplication\u002FDefault.aspx\t\t \t\t\t检查和转换数据\n\n第8章(\u002F08\u002F)\n StringApplication\u002FStringDealwith.aspx\t\t \t\t\t字符串处理\n StringBuilderApplication\u002FDealWithStringBuilder.aspx\t\t\t动态字符串处理\n\n第9章(\u002F09\u002F)\n RegexApplication\u002FDefault.aspx\t\t \t\t\t\t正则表达式类的应用\n RegexApplication\u002FGetPageHtmlData.aspx\t\t\t\t\t获取网页的内容\n\n第10章(\u002F10\u002F)\n ASPNETValidator\u002FCompare.aspx\t\t \t\t\t\t比较验证\n ASPNETValidator\u002FCompareCheck.aspx\t\t\t\t\t数据类型检查\n ASPNETValidator\u002FCompareValue.aspx\t\t\t\t\t值比较验证\n ASPNETValidator\u002FCustomClient.aspx\t\t\t\t\t\t自定义客户端验证\n ASPNETValidator\u002FCustomServer.aspx\t\t\t\t\t\t自定义服务器端验证\n ASPNETValidator\u002FNotNull.aspx\t\t\t\t\t\t\t非空验证\n ASPNETValidator\u002FNotNullInitValue.aspx\t\t\t\t\t不等于初始化值的验证\n ASPNETValidator\u002FRangeDate.aspx\t\t\t\t\t\t日期范围验证\n ASPNETValidator\u002FRangeInt.aspx\t\t\t\t\t\t\t整数范围验证\n ASPNETValidator\u002FRangeLetter.aspx\t \t\t\t\t字母范围验证\n ASPNETValidator\u002FREDate.aspx\t\t \t\t\t\t日期格式验证\n ASPNETValidator\u002FREEmail.aspx\t\t \t\t\t\t电子邮件格式验证\n ASPNETValidator\u002FREIdentity.aspx\t \t\t\t\t身份证号码格式验证\n ASPNETValidator\u002FREInt.aspx\t\t \t\t\t\t整数格式验证\n ASPNETValidator\u002FRENumber.aspx\t \t\t\t\t数值格式验证\n ASPNETValidator\u002FREPhone.aspx\t \t\t\t\t电话号码格式验证\n ASPNETValidator\u002FREUrl.aspx\t\t \t\t\t\tURL地址格式验证\n ASPNETValidator\u002FSummaryDialog.aspx\t \t\t\t对话框式验证摘要\n ASPNETValidator\u002FSummaryPage.aspx\t \t\t\t网页式验证摘要\n\n第11章(\u002F11\u002F)\n 判断是否为对象.asp\t\t\t\t\t\t\t\t\t判断是否为对象\n 判断是否为数值.asp\t\t\t\t\t\t\t\t\t判断是否为数值\n 判断是否为\u003Cem\u003E数组\u003C\u002Fem\u003E.asp\t\t\t\t\t\t\t\t\t判断是否为\u003Cem\u003E数组\u003C\u002Fem\u003E\n 判断是否为日期.asp\t\t\t\t\t\t\t\t\t判断是否为日期\n 判断是否为空.asp\t\t\t\t\t\t\t\t\t判断是否为空\n 判断是否为空值.asp\t\t\t\t\t\t\t\t\t判断是否为空值\n 获取变量类型信息.asp\t\t\t\t\t\t\t\t获取变量类型信息\n\n第12章(\u002F11\u002F)\n 从中截取字符串.asp\t\t\t\t\t\t\t\t\t从中截取字符串\n 切分字符串.asp\t\t\t\t\t\t\t\t\t\t切分字符串\n 删除字符串前后导空格.asp\t\t\t\t\t\t\t\n 删除字符串前导空格.asp\t\t\t\t\t\t\t\t\n 删除字符串后导空格.asp\t\t\t\t\t\t\t\t\n 反向截取字符串.asp\t\t\t\t\t\t\t\t\t\n 反向查找字符串.asp\t\t\t\t\t\t\t\t\t\n 字符串倒序排列.asp\t\t\t\t\t\t\t\t\t\n 字符串大写转化.asp\t\t\t\t\t\t\t\t\t\n 字符串小写转化.asp\t\t\t\t\t\t\t\t\t\n 字符串替换.asp\t\t\t\t\t\t\t\t\t\t\n 将\u003Cem\u003E数组\u003C\u002Fem\u003E元素连接为字符串.asp\t\t\t\t\t\t\t\n 构造制定字符串.asp\t\t\t\t\t\t\t\t\t\n 正向截取字符串.asp\t\t\t\t\t\t\t\t\t\n 正向查找字符串.asp\t\t\t\t\t\t\t\t\t\n 获取字符串长度.asp\t\t\t\t\t\t\t\t\t\n\n第13章(\u002F14\u002F)\n Matches集合与Macth对象.asp\t\t\t\t\t\t\t\n 指定忽略大小写.asp\t\t\t\t\t\t\t\t\t\n 获取Matches集合.asp\t\t\t\t\t\t\t\t\t\n 进行正则匹配替换.asp\t\t\t\t\t\t\t\t\t\n 进行正则匹配检验.asp\t\t\t\t\t\t\t\t\t\n\n第14章(\u002F14\u002F)\n 浮点型数据测试.\u003Cem\u003Ephp\u003C\u002Fem\u003E 浮点型数据测试\n 字符串数据测试.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符串数据测试\n \u003Cem\u003E数组\u003C\u002Fem\u003E数据测试.\u003Cem\u003Ephp\u003C\u002Fem\u003E \u003Cem\u003E数组\u003C\u002Fem\u003E数据测试\n 对象测试.\u003Cem\u003Ephp\u003C\u002Fem\u003E 对象测试\n 数据类型识别.\u003Cem\u003Ephp\u003C\u002Fem\u003E 数据类型识别\n 强制类型转化.\u003Cem\u003Ephp\u003C\u002Fem\u003E 强制类型转化\n 计算圆周面积程序.\u003Cem\u003Ephp\u003C\u002Fem\u003E 计算圆周面积程序\n 字符串转化.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符串转化\n 数值转化.\u003Cem\u003Ephp\u003C\u002Fem\u003E 数值转化\n \u003Cem\u003E数组\u003C\u002Fem\u003E转化.\u003Cem\u003Ephp\u003C\u002Fem\u003E \u003Cem\u003E数组\u003C\u002Fem\u003E转化\n\n第15章(\u002F15\u002F)\n 计算字符串的长度.\u003Cem\u003Ephp\u003C\u002Fem\u003E 计算字符串的长度\n 访问单个字符.\u003Cem\u003Ephp\u003C\u002Fem\u003E 访问单个字符\n 检索字符的位置.\u003Cem\u003Ephp\u003C\u002Fem\u003E 检索字符的位置\n 截取子字符.\u003Cem\u003Ephp\u003C\u002Fem\u003E 截取子字符\n 查找字符串出现的次数.\u003Cem\u003Ephp\u003C\u002Fem\u003E 查找字符串出现的次数\n 替换子字符串.\u003Cem\u003Ephp\u003C\u002Fem\u003E 替换子字符串\n 按照特定字符进行分割.\u003Cem\u003Ephp\u003C\u002Fem\u003E 按照特定字符进行分割\n 按照指定数目进行分割.\u003Cem\u003Ephp\u003C\u002Fem\u003E 按照指定数目进行分割\n 删除字符串的空白.\u003Cem\u003Ephp\u003C\u002Fem\u003E 删除字符串的空白\n 字符串的填补.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符串的填补\n 字符串大小写的转换.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符串大小写的转换\n 字符串的反转.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符串的反转\n 字符串按ASCII码顺序比较.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符串按ASCII码顺序比较\n 字符串按“自然排序”法比较.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符串按“自然排序”法比较\n 根据单词的发音比较.\u003Cem\u003Ephp\u003C\u002Fem\u003E 根据单词的发音比较\n 根据单词的相似性比较.\u003Cem\u003Ephp\u003C\u002Fem\u003E 根据单词的相似性比较\n 查找子字符串.\u003Cem\u003Ephp\u003C\u002Fem\u003E 查找子字符串\n 搜寻出现的字符.\u003Cem\u003Ephp\u003C\u002Fem\u003E 搜寻出现的字符\n 字符匹配.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符匹配\n 字符替换.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符替换\n 字符串翻译.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符串翻译\n 格式化数字.\u003Cem\u003Ephp\u003C\u002Fem\u003E 格式化数字\n 格式化\u003Cem\u003E表单\u003C\u002Fem\u003E字符串.\u003Cem\u003Ephp\u003C\u002Fem\u003E 格式化\u003Cem\u003E表单\u003C\u002Fem\u003E字符串\n 24.\u003Cem\u003Ephp\u003C\u002Fem\u003E 格式化字符串\n 25.\u003Cem\u003Ephp\u003C\u002Fem\u003E 格式化HTML实体\n 26.\u003Cem\u003Ephp\u003C\u002Fem\u003E HTML标签的清理\n 解析URL字符串.\u003Cem\u003Ephp\u003C\u002Fem\u003E 解析URL字符串\n 解析查询字符串.\u003Cem\u003Ephp\u003C\u002Fem\u003E 解析查询字符串\n URL编码处理.\u003Cem\u003Ephp\u003C\u002Fem\u003E URL编码处理\n 查询字符串的构造.\u003Cem\u003Ephp\u003C\u002Fem\u003E 查询字符串的构造\n\n第16章(\u002F16\u002F)\n 字符串模式匹配.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符串模式匹配\n 字符串大小模式匹配.\u003Cem\u003Ephp\u003C\u002Fem\u003E 字符串大小模式匹配\n 日期字符串模式匹配.\u003Cem\u003Ephp\u003C\u002Fem\u003E 日期字符串模式匹配\n 模式替换.\u003Cem\u003Ephp\u003C\u002Fem\u003E 模式替换\n 模式分割.\u003Cem\u003Ephp\u003C\u002Fem\u003E 模式分割\n 正则表达式匹配.\u003Cem\u003Ephp\u003C\u002Fem\u003E 正则表达式匹配\n 其他的正则表达式匹配.\u003Cem\u003Ephp\u003C\u002Fem\u003E 其他的正则表达式匹配\n 取得正则表达式的全部匹配.\u003Cem\u003Ephp\u003C\u002Fem\u003E 取得正则表达式的全部匹配\n 返回与模式匹配的\u003Cem\u003E数组\u003C\u002Fem\u003E单元.\u003Cem\u003Ephp\u003C\u002Fem\u003E 返回与模式匹配的\u003Cem\u003E数组\u003C\u002Fem\u003E单元\n 正则表达式的替换.\u003Cem\u003Ephp\u003C\u002Fem\u003E 正则表达式的替换\n 正则表达式的拆分.\u003Cem\u003Ephp\u003C\u002Fem\u003E 正则表达式的拆分\n \u003Cem\u003E表单\u003C\u002Fem\u003E验证.\u003Cem\u003Ephp\u003C\u002Fem\u003E \u003Cem\u003E表单\u003C\u002Fem\u003E验证\n UBBCode.\u003Cem\u003Ephp\u003C\u002Fem\u003E\t\t\t\t\t\t\t UBB代码\n ubb.html\t\t\t\t\t\t\t\t\t UBB代码输入界面\n ubb.\u003Cem\u003Ephp\u003C\u002Fem\u003E\t\t\t\t\t\t\t\t\t UBB代码输出界面\n Apache日志分析.\u003Cem\u003Ephp\u003C\u002Fem\u003E\t\t\t\t\t\t\t Apache日志分析\n\n第17章(\u002F17\u002F)\n JSPExample1.jsp\t\t\t\t\t\tJSP页面中整型数据的使用\n JSPExample2.jsp\t\t\t\t\t\tJSP页面中循环输出整型数据\n JSPExample3.jsp\t\t\t\t\t\t计算一光年的距离\n JSPExample4.jsp\t\t\t\t\t\tJSP页面中计算圆的面积\n JSPExample5.jsp\t\t\t\t\t\tJSP页面中字符数据的简单使用\n JSPExample6.jsp\t\t\t\t\t\t结合布尔类型变量判断学生成绩等级\n JSPExample7.jsp\t\t\t\t\t\ttext.html页面提交至该页,并显示提交数据\n text.html\t\t\t\t\t\t\t页面数据提交至JSPExample7.jsp\n JSPExample8.jsp\t\t\t\t\t\t不同类型混合运算自动转换\n JSPExample9.jsp\t\t\t\t\t\t不同类型混合运算强制转换\n JSPExample10.jsp\t\t\t\t\t字符串类型与其他数据类型的转换\n JSPExample11.jsp\t\t\t\t\t解析字符串的子字符串\n stringOP.html\t\t\t\t\t\t页面数据提交至JSPExample12.jsp\n JSPExample12.jsp\t\t\t\t\t字符串替换\n JSPExample13.jsp\t\t\t\t\t字符串大小写转换、反转等操作\n logon.html\t\t\t\t\t\t\t页面数据提交至JSPExample14.jsp\n JSPExample14.jsp\t\t\t\t\t字符串数据的比较\n JSPExample15.jsp\t\t\t\t\t字符串数据的连接\n JSPExample16.jsp\t\t\t\t\t字符串数据的格式化\n\n第18章(\u002F18\u002F)\n 1.jsp\t\t\t\t\t\t\t\tPattern对象使用split方法示例一\n 2.jsp\t\t\t\t\t\t\t\tPattern对象使用split方法示例二\n 3.jsp\t\t\t\t\t\t\t\tMatcher对象使用appendReplacement方法示例\n 4.jsp\t\t\t\t\t\t\t\tMatcher对象使用groupCount方法示例\n 5.jsp\t\t\t\t\t\t\t\tMatcher对象使用find方法示例\n 6.jsp\t\t\t\t\t\t\t\tMatcher对象使用group方法示例\n 7.jsp\t\t\t\t\t\t\t\t字符串对象使用split方法\n 8.jsp\t\t\t\t\t\t\t\tMatcher对象使用replaceAll方法示例\n 9.html\t\t\t\t\t\t\t\t页面数据提交至9.jsp\n 9.jsp\t\t\t\t\t\t\t\t利用正则表达式验证邮箱地址\n 10.html\t\t\t\t\t\t\t页面数据提交至10.jsp\n 10.jsp\t\t\t\t\t\t\t\t利用正则表达式验证URL地址\n 11.html\t\t\t\t\t\t\t页面数据提交至11.jsp\n 11.jsp\t\t\t\t\t\t\t\t利用正则表达式验证电话号码\n\n第20章(\u002F20\u002F)\n 从字符串中提取子串(1).html\t\t\t\t\t从字符串中提取子串(1)\n 从字符串中提取子串(2).html\t\t\t\t\t从字符串中提取子串(2)\n 从字符串中提取子串(3).html\t\t\t\t\t从字符串中提取子串(3)\n 删除或替换\u003Cem\u003E数组\u003C\u002Fem\u003E中部分数据.html\t\t\t\t\t删除或替换\u003Cem\u003E数组\u003C\u002Fem\u003E中部分数据\n 删除\u003Cem\u003E数组\u003C\u002Fem\u003E中最后一个元素.html\t\t\t\t\t\t删除\u003Cem\u003E数组\u003C\u002Fem\u003E中最后一个元素\n 删除\u003Cem\u003E数组\u003C\u002Fem\u003E中的第一个元素.html\t\t\t\t\t\t删除\u003Cem\u003E数组\u003C\u002Fem\u003E中的第一个元素\n 反序排列\u003Cem\u003E数组\u003C\u002Fem\u003E中的元素.html\t\t\t\t\t\t反序排列\u003Cem\u003E数组\u003C\u002Fem\u003E中的元素\n 在字符串上加入超级链接.html\t\t\t\t\t\t在字符串上加入超级链接\n 在字符串两端加上小字体标记.html\t\t\t\t\t在字符串两端加上小字体标记\n 在字符串两端加入上标标签.html\t\t\t\t\t在字符串两端加入上标标签\n 在字符串两端加入下标标签.html\t\t\t\t\t在字符串两端加入下标标签\n 在字符串两端加入斜体标签.html\t\t\t\t\t在字符串两端加入斜体标签\n 在字符串两端加入锚点标志.html\t\t\t\t\t在字符串两端加入锚点标志\n 在字符串的两端加上固定宽度字体标记.html\t在字符串的两端加上固定宽度字体标记\n 在字符串的两端加上粗体标志.html\t\t\t\t\t在字符串的两端加上粗体标志\n 在字符串的两端加入下划线标记.html\t\t\t\t在字符串的两端加入下划线标记\n 在指定字符串的两端加上大字体标志.html\t\t在指定字符串的两端加上大字体标志\n 在\u003Cem\u003E数组\u003C\u002Fem\u003E前面插入数据.html\t\t\t\t\t\t\t在\u003Cem\u003E数组\u003C\u002Fem\u003E前面插入数据\n 对\u003Cem\u003E数组\u003C\u002Fem\u003E中的元素进行排序.html\t\t\t\t\t\t对\u003Cem\u003E数组\u003C\u002Fem\u003E中的元素进行排序\n 将一个或多个字符串连接到当前字符串的末尾.html\t将一个或多个字符串连接到当前字符串的末尾\n 将字符串分割并存储到\u003Cem\u003E数组\u003C\u002Fem\u003E中.html\t\t\t\t\t将字符串分割并存储到\u003Cem\u003E数组\u003C\u002Fem\u003E中\n 将字符串转化为大写格式.html\t\t\t\t\t\t将字符串转化为大写格式\n 将字符串转化为小写格式.html\t\t\t\t\t\t将字符串转化为小写格式\n 将指定的数据添加到\u003Cem\u003E数组\u003C\u002Fem\u003E中.html\t\t\t\t\t将指定的数据添加到\u003Cem\u003E数组\u003C\u002Fem\u003E中\n 将\u003Cem\u003E数组\u003C\u002Fem\u003E元素连接为字符串.html\t\t\t\t\t\t将\u003Cem\u003E数组\u003C\u002Fem\u003E元素连接为字符串\n 替换字符串中指定的内容.html\t\t\t\t\t\t替换字符串中指定的内容\n 根据指定的Unicode编码返回一个字符串.html\t\t根据指定的Unicode编码返回一个字符串\n 比较两个字符串的大小.html\t\t\t\t\t\t比较两个字符串的大小\n 获取字符串的长度.html\t\t\t\t\t\t\t获取字符串的长度\n 获取指定位置的字符的Unicode编码.html\t\t获取指定位置的字符的Unicode编码\n 获取指定字符(串)第一次在字符串中出现的位置.html\t\t获取指定字符(串)第一次在字符串中出现的位置\n 获取\u003Cem\u003E数组\u003C\u002Fem\u003E中的一部分数据.html\t\t\t\t\t\t获取\u003Cem\u003E数组\u003C\u002Fem\u003E中的一部分数据\n 设置字符串输出时的前景色.html\t\t\t\t\t设置字符串输出时的前景色\n 设置字符串输出时的字体大小.html\t\t\t\t\t设置字符串输出时的字体大小\n 返回一个包含\u003Cem\u003E数组\u003C\u002Fem\u003E中全部数据的字符串.html\t返回一个包含\u003Cem\u003E数组\u003C\u002Fem\u003E中全部数据的字符串\n 返回字符串中指定位置处的字符.html\t\t\t\t返回字符串中指定位置处的字符\n 连接其他\u003Cem\u003E数组\u003C\u002Fem\u003E到当前\u003Cem\u003E数组\u003C\u002Fem\u003E末尾.html\t\t\t\t\t连接其他\u003Cem\u003E数组\u003C\u002Fem\u003E到当前\u003Cem\u003E数组\u003C\u002Fem\u003E末尾\n\n第21章(\u002F21\u002F)\n 判断字符串中是否存在匹配内容.html\t\t\t\t判断字符串中是否存在匹配内容\n 对字符串进行匹配检测.html\t\t\t\t\t\t对字符串进行匹配检测\n 替换字符串中的指定内容.html\t\t\t\t\t\t替换字符串中的指定内容\n 编译正则表达式.html\t\t\t\t\t\t\t\t编译正则表达式\n 获取与正则表达式进行匹配检测的字符串.html\t\t获取与正则表达式进行匹配检测的字符串\n 获取匹配内容右侧的字符信息.html\t\t\t\t\t获取匹配内容右侧的字符信息\n 获取匹配内容左侧的字符信息.html\t\t\t\t\t获取匹配内容左侧的字符信息\n 获取匹配的内容的最后一个索引位置.html\t\t\t获取匹配的内容的最后一个索引位置\n 获取子匹配的结果.html\t\t\t\t\t\t\t获取子匹配的结果\n 获取字符串中所有的匹配信息.html\t\t\t\t\t获取字符串中所有的匹配信息\n 获取最近一次匹配的内容.html\t\t\t\t\t\t获取最近一次匹配的内容\n 获取最近一次匹配的最后一个子匹配.html\t\t\t获取最近一次匹配的最后一个子匹配\n 获取第一次匹配的起始位置(1).html\t\t\t\t获取第一次匹配的起始位置(1)\n 获取第一次匹配的起始位置(2).html\t\t\t\t获取第一次匹配的起始位置(2)","createTime":"2009-07-07 13:41:21","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-1469387-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-1469387-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"1\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Ftds13149530\u002F1469387\",\"strategy\":\"2~default~OPENSEARCH~Paid\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-1469387-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713862001382_29045\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"1\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Ftds13149530\u002F1469387\",\"strategy\":\"2~default~OPENSEARCH~Paid\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Paid-1-1469387-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713862001382_29045\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fquanquan_1989\u002F2280094","title":"\u003Cem\u003EPHP\u003C\u002Fem\u003E基础教程 是一个比较有价值的\u003Cem\u003EPHP\u003C\u002Fem\u003E新手教程!","desc":"标题:\u003Cem\u003EPHP\u003C\u002Fem\u003E基础教程\n出处:风流的CG网络日志\n时间:Mon, 28 Aug 2006 07:24:34 +0000\n作者:yufeng\n地址:http:\u002F\u002F\u002Fread.\u003Cem\u003Ephp\u003C\u002Fem\u003E?38\n\n内容:\n\n提供给新手学习的 \u003Cem\u003EPHP\u003C\u002Fem\u003E新手教程,是一个比较有价值的\u003Cem\u003EPHP\u003C\u002Fem\u003E新手教程!\n\n\n\n一、\u003Cem\u003EPHP\u003C\u002Fem\u003E简介\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E是一种易于学习和使用的服务器端脚本语言。只需要很少的编程知识你就能使用\u003Cem\u003EPHP\u003C\u002Fem\u003E建立一个真正交互的WEB站点。本教程并不想让你完全了解这种语言,只是能使你尽快加入开发动态web站点的行列。我假定你有一些HTML(或者HTML编辑器)的基本知识和一些编程思想。\n\n1.简介\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E是能让你生成动态网页的工具之一。\u003Cem\u003EPHP\u003C\u002Fem\u003E网页文件被当作一般HTML网页文件来处理并且在编辑时你可以用编辑HTML的常规方法编写\u003Cem\u003EPHP\u003C\u002Fem\u003E。\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E代表:超文本预处理器(\u003Cem\u003EPHP\u003C\u002Fem\u003E: Hypertext Preprocessor)。\u003Cem\u003EPHP\u003C\u002Fem\u003E是完全免费的,不用花钱,你可以从\u003Cem\u003EPHP\u003C\u002Fem\u003E官方站点(http:\u002F\u002Fwww.\u003Cem\u003Ephp\u003C\u002Fem\u003E.net)自由下载。\u003Cem\u003EPHP\u003C\u002Fem\u003E遵守GNU公共许可(GPL),在这一许可下诞生了许多流行的软件诸如Linux和Emacs。你可以不受限制的获得源码,甚至可以从中加进你自己需要的特色。\u003Cem\u003EPHP\u003C\u002Fem\u003E在大多数Unix平台,GUN\u002FLinux和微软Windows平台上均可以运行。怎样在Windows环境的PC机器或Unix机器上安装\u003Cem\u003EPHP\u003C\u002Fem\u003E的资料可以在\u003Cem\u003EPHP\u003C\u002Fem\u003E官方站点上找到。安装过程很简单。\n\n\n如果你的机器解决了2000问题,那么\u003Cem\u003EPHP\u003C\u002Fem\u003E也一样没有千年虫问题!\n\n1.1 历史\n\n三年前,Rasmus Lerdorf为了创建他的在线简历而创造了\"个人主页工具\"(Personal Home Page Tools)。这是一种非常简单的语言。其后越来越多的人们注意到了这种语言并对其扩展提出了各种建议。在许多人的无私奉献下以及这种语言本身的源代码自由性质,它演变成为一种特点丰富的语言,而且现在还在成长中。\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E虽然很容易学习,但是速度上比mod_perl(植入web服务器的perl模块)慢。现在有了可以与mod_perl速度想媲美的被称作Zend的新引擎,而\u003Cem\u003EPHP\u003C\u002Fem\u003E4就可以充分利用这个引擎。\u003Cem\u003EPHP\u003C\u002Fem\u003E4还处在BETA测试阶段。Andy Gutmans和Zeev Suraki是Zend的主要作者。可以去Zend站点(http:\u002F\u002Fwww.zend.com)了解更多。\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E的应用在个人性质的web工程中增长显著。根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用\u003Cem\u003EPHP\u003C\u002Fem\u003E技术。\n\n1.2 \u003Cem\u003EPHP\u003C\u002Fem\u003E的先进之处\n\n应用\u003Cem\u003EPHP\u003C\u002Fem\u003E有许多好处。当然已知的不利之处在于\u003Cem\u003EPHP\u003C\u002Fem\u003E由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度缓慢(直到\u003Cem\u003EPHP\u003C\u002Fem\u003E4之前)。但是\u003Cem\u003EPHP\u003C\u002Fem\u003E的邮件列表很是有用而且除非你正在运行像Yahoo!或者Amazon.com这样的极受欢迎的站点,你不会感觉出\u003Cem\u003EPHP\u003C\u002Fem\u003E的速度与其他的有什么不同。最起码我就没有感觉出来!好了,让我们来看看\u003Cem\u003EPHP\u003C\u002Fem\u003E有那些优点:\n\n- 学习过程\n\n\n我个人更喜欢\u003Cem\u003EPHP\u003C\u002Fem\u003E的非常简单的学习过程。与Java和Perl不同,你不必把头埋进100多页的文档中努力学习才可以写出一个象样的程序。只要了解一些基本的语法和语言特色,你就可以开始你的\u003Cem\u003EPHP\u003C\u002Fem\u003E编码之旅了。之后你在编码过程中如果遇到了什么麻烦,还可以再去翻阅相关文档。\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E的语法与C,Perl,ASP或者JSP。对于那些对上述之一的语言较熟悉的人来说,\u003Cem\u003EPHP\u003C\u002Fem\u003E太简单了。相反的,如果你对\u003Cem\u003EPHP\u003C\u002Fem\u003E了解较多,那么你对于其他几种语言的学习都很简单了。\n\n你只需要30分钟就可以将\u003Cem\u003EPHP\u003C\u002Fem\u003E的核心语言特点全部掌握,你可能已经非常了解HTML,甚至你已经知道怎样用编辑设计软件或者手工来制作好看的WEB站点。由于\u003Cem\u003EPHP\u003C\u002Fem\u003E代码能够无障碍的添加进你的站点,在你设计和维护站点的同时,你可以很轻松的加入\u003Cem\u003EPHP\u003C\u002Fem\u003E使得你的站点更加具有动态特性。\n\n- 数据库连接\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E可以编译成具有与许多数据库相连接的函数。\u003Cem\u003EPHP\u003C\u002Fem\u003E与MySQL是现在绝佳的组合。你还可以自己编写外围的函数取间接存取数据库。通过这样的途径当你更换使用的数据库时,可以轻松的更改编码以适应这样的变化。\u003Cem\u003EPHP\u003C\u002Fem\u003ELIB就是最常用的可以提供一般事务需要的一系列基库。\n\n- 可扩展性\n\n就像前面说的那样,\u003Cem\u003EPHP\u003C\u002Fem\u003E已经进入了一个高速发展的时期。对于一个非程序员来说为\u003Cem\u003EPHP\u003C\u002Fem\u003E扩展附加功能可能会比较难,但是对于一个\u003Cem\u003EPHP\u003C\u002Fem\u003E程序员来说并不困难。\n\n- 面向对象编程\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E提供了类和对象。基于web的编程工作非常需要面向对象编程能力。\u003Cem\u003EPHP\u003C\u002Fem\u003E支持构造器、提取类等。\n\n- 可伸缩性\n\n传统上网页的交互作用是通过CGI来\u003Cem\u003E实现\u003C\u002Fem\u003E的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。\u003Cem\u003EPHP\u003C\u002Fem\u003E就可以以这种方式安装,虽然很少有人愿意这样以CGI方式安装它。内嵌的\u003Cem\u003EPHP\u003C\u002Fem\u003E可以具有更高的可伸缩性。\n\n- 更多特点\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E的开发者们为了更适合web编程,开发了许多外围的流行基库,这些库包含了更易用的层。你可以利用\u003Cem\u003EPHP\u003C\u002Fem\u003E连接包括Oracle,MS-Access,Mysql在内的大部分数据库。你可以在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,你可以选择你的\u003Cem\u003EPHP\u003C\u002Fem\u003E安装版本需要哪些功能。引用Nissan的Xterra的话来说就是\u003Cem\u003EPHP\u003C\u002Fem\u003E可以做到你想让它做到的一切而且无所不能!\n\n1.3 竞争对手:ASP,mod_perl,JSP\n\n我当然不清楚ASP\u002FJSP能做些什么。不过明确的是编写那样的代码有多简单,购买它们会有多昂贵以及它们需要多么昂贵和强大的硬件。如果你有什么中立的观点(比如说没有被SUN和Microsoft的百万美金所影响),请顺便通知我。\n\n据我所知,JSP基于Java,因此Java程序员可以轻松开始编码。ASP只是一个一般的引擎,具有支持多种语言的能力,不过默认的并且是最常用的还是VBScript。\n\nmod_perl与Perl一样强大,只是更快一些。\n\n二、\u003Cem\u003EPHP\u003C\u002Fem\u003E入门\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E站点的在线教程已经很棒了。在那里还有一些其他教程的链接。而本文的该部分将让你对\u003Cem\u003EPHP\u003C\u002Fem\u003E熟悉一点。我不可能做到没有任何遗漏,我的目的只在于能让你迅速开始你的\u003Cem\u003EPHP\u003C\u002Fem\u003E编程。\n\n2.1 首要条件\n\n你首先必须要有一个正在工作着的支持\u003Cem\u003EPHP\u003C\u002Fem\u003E的web服务器。我假定在你的服务器上所有\u003Cem\u003EPHP\u003C\u002Fem\u003E文件的扩展名为.\u003Cem\u003Ephp\u003C\u002Fem\u003E3。\n\n2.2 \u003Cem\u003EPHP\u003C\u002Fem\u003E的安装\n\n生成一个名为test.\u003Cem\u003Ephp\u003C\u002Fem\u003E3的文件,含有以下内容:\n\n然后在你的浏览器中打开此文件。看看这个页面你就知道你的\u003Cem\u003EPHP\u003C\u002Fem\u003E安装使用的选项了。\n\n2.3 语法\n\n就像前面提到的一样,你可以混合编写你的\u003Cem\u003EPHP\u003C\u002Fem\u003E代码和HTML代码。因此你必须有办法将两者区别开来。以下就是你可以采用的几种方法。你可以选用其中一种你最适应的并且就这样坚持这种方法!\n\n从HTML中分离\n\n以下是可以使用的方法:\n\n\n . . . \n\n\n语句\n\n与Perl和C一样,在\u003Cem\u003EPHP\u003C\u002Fem\u003E中用(;)来分隔语句。那些从HTML中分离出来的标志也表示语句的结束。\n\n注释\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E支持C,C++和Unix风格的注释方式:\n\n\u002F* C,C++风格多行注释 *\u002F\n\u002F\u002F C++风格单行注释\n# Unix风格单行注释\n\nHello,World!\n\n通过我们已经学过的知识,你可以编写一个最简单的程序输出一个也许是程序世界中最有名的词语:\n\n\n\n\n\n\n\n\nFirst \u003Cem\u003EPHP\u003C\u002Fem\u003E page\n\n\n\n\n\n\n2.4 数据类型\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E支持整数、浮点数、字符串、\u003Cem\u003E数组\u003C\u002Fem\u003E和对象。变量类型通常不由程序员决定而由\u003Cem\u003EPHP\u003C\u002Fem\u003E运行过程决定(真是好的解脱!)。但是类型也可以被函数cast或者settype()明确的设定。\n\n数值\n\n数值类型可以是整数或是浮点数。你可以用以下的语句来为一个数值赋值:\n$a = 1234; # 十进制数\n$a = -123; # 负数\n$a = 0123; # 八进制数 (等于十进制数的83)\n$a = 0x12; # 十六进制数(等于十进制数的18)\n$a = 1.234; # 浮点数\"双精度数\"\n$a = 1.2e3; # 双精度数的指数形式\n\n字符串\n\n字符串可以由单引号或双引号引出的字段定义。注意不同的是被单引号引出的字符串是以字面定义的,而双引号引出的字符串可以被扩展。反斜杠(\)可以被用来分割某些特殊字符。举例如下:\n$first = 'Hello';\n$second = \"World\";\n$full1 = \"$first $second\"; # 产生 Hello World\n$full2 = '$first $second';# 产生 $first $second\n\n可以将字符和数字利用运算符号连接起来。字符被转化成数字,利用其最初位置。在\u003Cem\u003EPHP\u003C\u002Fem\u003E手册中有详细的例子。\n\n\u003Cem\u003E数组\u003C\u002Fem\u003E与哈希表\n\n\u003Cem\u003E数组\u003C\u002Fem\u003E与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为\u003Cem\u003E数组\u003C\u002Fem\u003E赋值。\u003Cem\u003E数组\u003C\u002Fem\u003E的索引从0开始。虽然我在这里没有说明,但是你一样可以轻易的使用多维\u003Cem\u003E数组\u003C\u002Fem\u003E。\n\n\u002F\u002F 一个包含两个元素的\u003Cem\u003E数组\u003C\u002Fem\u003E\n$a[0] = \"first\";\n$a[1] = \"second\";\n$a[] = \"third\"; \u002F\u002F 添加\u003Cem\u003E数组\u003C\u002Fem\u003E元素的简单方法\n\u002F\u002F 现在$a[2]被赋值为\"third\"\necho count($a); \u002F\u002F 打印出3,因为该是\u003Cem\u003E数组\u003C\u002Fem\u003E有3个元素\n\u002F\u002F 用一个语句定义一个\u003Cem\u003E数组\u003C\u002Fem\u003E并赋值\n$myphonebook = array (\n\"sbabu\" =\u003E \"5348\",\n\"keith\" =\u003E \"4829\",\n\"carole\" =\u003E \"4533\"\n);\n\u002F\u002F 噢,忘了教长吧,让我们添加一个元素\n$myphonebook[\"dean\"] = \"5397\";\n\u002F\u002F 你定义的carale元素错了,让我们更正它\n$myphonebook[\"carole\"] =\u003E \"4522\"\n\u002F\u002F 我还没有告诉你怎样使用\u003Cem\u003E数组\u003C\u002Fem\u003E的相似支持方式吗?让我们看一看\necho \"$myphonebook[0]\"; \u002F\u002F sbabu\necho \"$myphonebook[1]\"; \u002F\u002F 5348\n\n其他一些对\u003Cem\u003E数组\u003C\u002Fem\u003E或哈希表有用的函数包括sort(),next(),prev()和each()。\n\n对象\n\n使用new语句产生一个对象:\nclass foo\n{\nfunction do_foo ()\n{\necho \"Doing foo.\";\n}\n}\n$bar = new foo;\n$bar-\u003Edo_foo();\n\n改变变量类型\n\n在\u003Cem\u003EPHP\u003C\u002Fem\u003E手册中提到:\"\u003Cem\u003EPHP\u003C\u002Fem\u003E不支持(也不需要)直接在声明变量时定义变量类型;变量类型将根据其被应用的情况决定。如果你为变量var赋值为一个字符串,那么它变成了一个字符串。如果你又为它赋了整数值,那么它就变成了整数。\"\n$foo = \"0\"; \u002F\u002F $foo是字符串(ASCII 48)\n$foo++; \u002F\u002F $foo是字符串\"1\" (ASCII 49)\n$foo += 1; \u002F\u002F $foo现在是整数(2)\n$foo = $foo + 1.3; \u002F\u002F $foo是一个双精度数(3.3)\n$foo = 5 + \"10 Little Piggies\"; \u002F\u002F $foo是一个整数(15)\n$foo = 5 + \"10 Small Pigs\"; \u002F\u002F $foo是一个整数(15)\n\n如果想要强行转换变量类型,可以使用与C语言相同的函数settype()。\n\n2.5 变量与常量\n\n可能你已经注意到,变量都有一个美元符号($)的前缀。所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。\n$g_var = 1 ; \u002F\u002F 全局范围\nfunction test()\n{\nglobal $g_var; \u002F\u002F 这样就可以声明全局变量了\n}\n\n更先进一些的是变量的变量表示。请参考\u003Cem\u003EPHP\u003C\u002Fem\u003E手册。这在有时会显得很有用。\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E内置了许多已定义的变量。你也可以用define函数定义你自己的常量,比如define(\"CONSTANT\",\"value\")。\n\n2.6 运算符\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E具有C,C++和Java中的通常见到的运算符。这些运算符的优先权也是一致的。赋值同样使用\"=\"。\n\n算术和字符\n\n以下只有一种运算符是有关字符的:\n$a + $b :加\n$a - $b :减\n$a * $b :乘\n$a \u002F $b :除\n$a % $b :取模(余数)\n$a . $b :字符串连接\n\n逻辑和比较\n\n逻辑运算符有:\n$a || $b :或\n$a or $b :或\n$a && $b :与\n$a and $b :与\n$a xor $b :异或 (当$a或$b为true时为true,两者一样时为false)\n! $a :非\n比较运算符有:\n$a == $b :相等\n$a != $b :不等\n$a \u003C $b :小于\n$a $b :大于\n$a \u003E= $b :大于等于\n与C一样\u003Cem\u003EPHP\u003C\u002Fem\u003E也有三重运算符(?:)。位操作符在\u003Cem\u003EPHP\u003C\u002Fem\u003E同样存在。\n\n优先权\n\n就和C以及Java一样!\n\n2.7 控制流程结构\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E有着与C一样的流程控制。我将在下面大概介绍。\n\nif, else, elseif, if(): endif\n\nif (表达式一)\n{\n. . .\n}\nelseif (表达式二)\n{\n. . .\n}\nelse\n{\n. . .\n}\n\u002F\u002F 或者像Python一样\nif (表达式一) :\n. . .\n. . .\nelseif (表达式二) :\n. . .\nelse :\n. . .\nendif ;\n\nLoops. while, do..while, for\n\nwhile (表达式)\n{\n. . .\n}\ndo\n{\n. . .\n}\nwhile (表达式);\nfor (表达式一; 表达式二; 表达式三)\n{\n. . .\n}\n\u002F\u002F或者像Python一样\nwhile (expr) :\n. . .\nendwhile ;\n\nswitch\n\nswitch是对多重if-elseif-else结构的最好的替换:\nswitch ($i)\n{\ncase 0:\nprint \"i equals 0\";\ncase 1:\nprint \"i equals 1\";\ncase 2:\nprint \"i equals 2\";\n}\n\nbreak, continue\n\nbreak中断当前的循环控制结构。\ncontinue被用来跳出剩下的当前循环并继续执行下一次循环。\n\nrequire, include\n\n就像C中的#include预处理一样。你在require中指定的那个文件将替代其在主文件中的位置。在有条件的引用文件时,可以使用include()。这样就使得你可以将复杂的\u003Cem\u003EPHP\u003C\u002Fem\u003E文件分割成多个文件并且在不同需要时分别引用它们。\n\n2.8 函数\n\n你可以像以下的例子一样定义自己的函数。函数的返回值可以是任何数据类型:\nfunction foo (变量名一, 变量名二, . . . , 变量名n)\n{\necho \"Example function.\n\";\nreturn $retval;\n}\n所有\u003Cem\u003EPHP\u003C\u002Fem\u003E代码都可以出现在函数定义中,甚至包括对其他函数和类的定义。函数必须在引用之前定义。\n\n2.9 类\n\n利用类模型建立类。可以参考\u003Cem\u003EPHP\u003C\u002Fem\u003E手册中对类的详细解释。\nclass Employee\n{\nvar $empno; \u002F\u002F 员工人数\nvar $empnm; \u002F\u002F 员工姓名\n\nfunction add_employee($in_num, $in_name)\n{\n$this-\u003Eempno = $in_num;\n$this-\u003Eempnm = $in_name;\n}\n\nfunction show()\n{\necho \"$this-\u003Eempno, $this-\u003Eempnm\";\nreturn;\n}\n\nfunction changenm($in_name)\n{\n$this-\u003Eempnm = $in_name;\n}\n}\n\n$sbabu = new Employee;\n$sbabu-\u003Eadd_employee(10,\"sbabu\");\n$sbabu-\u003Echangenm(\"babu\");\n\n$sbabu-\u003Eshow();\n\n三、从实例入手 \n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的\u003Cem\u003EPHP\u003C\u002Fem\u003E知识,我们可以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。\n\n3.1 计划一个站点\n一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的通用的页面头部和底部。\n\n标题页面--front.html\n\n\n这里我们有一个非常简单的html文件:\n\n\n\n我的个人主页--欢迎\n\n\n\n\n我的个人主页\n\n\n欢迎\n\n\n\n欢迎来我的寒舍,虽然这里现在暂时还没有什么。\n\n\n不过我希望马上就可以多起来。\n\n\n\n \nCopyright ? 我自己,1999\n \n\n\n\n\n联系信息页面--count.html\n\n同样我们又有了一个简单页面:\n\n\n\n我的个人主页--联系信息\n\n\n\n\n我的个人主页\n\n\n联系信息\n\n\n\n你可以通过1-800-\u003Cem\u003EPHP\u003C\u002Fem\u003E-INFO联系我\n\n\n\n \nCopyright ? 我自己,1999\n \n\n\n\n\n\n3.2 HTML到\u003Cem\u003EPHP\u003C\u002Fem\u003E\n\n从上面你可以看出,每个页面有相同的头部和底部。像上面那样每个页面都写入相同的信息在工作量少的时候还可以,但是想象一下当有100多页面且你需要全部更改其头部或底部时你要花费多大精力?一页一页的手工更改是一件多么冗长无趣的事情啊!所以我们应该为这些页面编写\u003Cem\u003EPHP\u003C\u002Fem\u003E的头部和底部文件,之后我们只要在每个HTML页面中引用它们就行了。我们将把这些include文件放在一个叫include的子目录下。下面我们就把这些站点的通用内容写进文件中。\n\n全站通用变量设定:common.inc\n\u003C?\n\u002F\u002F 全站通用变量\n$MyEmail = \"\u003Cem\u003Ephp\u003C\u002Fem\u003Etalk@tnc.org\";\n$MyEmailLink = \"$MyEmail\";\n$MyName = \"\u003Cem\u003EPHP\u003C\u002Fem\u003E Talk\";\n$MySiteName = $MyName.\"'s Home Page\";\n?\u003E\n\n通用页面头部:header.inc\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n通用页面底部:footer.inc\n\n\n\n \nCopyright ? by\n\n, 1999\n \n\n\n\n\n新的页面front.\u003Cem\u003Ephp\u003C\u002Fem\u003E3:\n\n\n欢迎来我的寒舍,虽然这里现在暂时还没有什么。\n\n\n不过我希望马上就可以多起来。\n\n\n\n新的cont.\u003Cem\u003Ephp\u003C\u002Fem\u003E3:\n\n\n你可以通过1-800-\u003Cem\u003EPHP\u003C\u002Fem\u003E-INFO联系我\n\n\n\n现在你就可以猜出这样安排的好处了。如果你想改动页面的头部或者底部,你只需要改动相应的文件就可以了。如果你要修改你的e-mail地址甚至你的名字,只要修改common.inc文件就行了。另外值得注意的是你可以把具有任何文件名或者文件扩展名的文件包含进你的文件中,你甚至可以包含其他站点上的文件。\n\n3.3 计数器\n\n让我们在首页上加上一个计数器。这个例子已经被讲过多次了,但是还是有利于演示怎样读写文件以及创建自己的函数。counter.inc包含以下代码:\n\n然后我们更改front.\u003Cem\u003Ephp\u003C\u002Fem\u003E3文件以显示这个计数器:\n\u003C?\ninclude(\"include\u002Fcounter.inc\");\n\u002F\u002F 我把计数值放在文件counter.txt中,读出并输出\nprintf (\"%06d \n\",\nget_hitcount(\"counter.txt\"));\ninclude(\"include\u002Ffooter.inc\");\n?\u003E\n看看我们的新front.\u003Cem\u003Ephp\u003C\u002Fem\u003E3\n\n3.4 反馈\u003Cem\u003E表单\u003C\u002Fem\u003E\n\n让我们再添加一个反馈\u003Cem\u003E表单\u003C\u002Fem\u003E以便你的浏览者填写并e-mail给你。举例来说我们用一种很简单的方法\u003Cem\u003E实现\u003C\u002Fem\u003E它,我们只需要两个页面:一个为浏览者提供输入\u003Cem\u003E表单\u003C\u002Fem\u003E;一个获得\u003Cem\u003E表单\u003C\u002Fem\u003E数据并处理、mail给你。\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E中获取\u003Cem\u003E表单\u003C\u002Fem\u003E数据是很简单的。当一个\u003Cem\u003E表单\u003C\u002Fem\u003E被发送后,\u003Cem\u003E表单\u003C\u002Fem\u003E中所包含的各个元素被赋上了相应的值,而这样就可以像引用一般变量一样使用了。\n\n\n\n\n在process_form.\u003Cem\u003Ephp\u003C\u002Fem\u003E3中,变量$mytext就被赋予了输入的值--非常简单!同样的,你可以从列表框、多选框、单选框、按钮等\u003Cem\u003E表单\u003C\u002Fem\u003E元素中取得变量值。你唯一要做的就是为\u003Cem\u003E表单\u003C\u002Fem\u003E中的每一个元素取名以便将来可以引用。\n\n根据这个方法,我们可以生成一个简单的包含三个元素的\u003Cem\u003E表单\u003C\u002Fem\u003E:姓名、e-mail地址和留言。当浏览者发送\u003Cem\u003E表单\u003C\u002Fem\u003E后,处理该\u003Cem\u003E表单\u003C\u002Fem\u003E的\u003Cem\u003EPHP\u003C\u002Fem\u003E页面(sendfdbk.\u003Cem\u003Ephp\u003C\u002Fem\u003E3)读取数据,检查姓名是否为空,最后将数据mail给你。\n\n\u003Cem\u003E表单\u003C\u002Fem\u003E:form.\u003Cem\u003Ephp\u003C\u002Fem\u003E3\n\n\n\n\n\n\n\nYour feedback on my home page.\n\n\n\n\n\n\n\n处理\u003Cem\u003E表单\u003C\u002Fem\u003E:sendfdbk.\u003Cem\u003Ephp\u003C\u002Fem\u003E3\n\u003C?\ninclude(\"include\u002Fcommon.inc\");\n$title = \"Feedback\";\ninclude(\"include\u002Fheader.inc\");\nif ( $name == \"\" )\n{\n\u002F\u002F 现在我很讨厌匿名的留言!\necho \"Duh ? How come you are anonymous?\";\n}\nelseif ($name == \"Your name\")\n{\n\u002F\u002F 这个浏览者真是不想透露姓名啊!\necho \"Hello ? Your name is supposed to be replaced with\nyour actual name!\";\n}\nelse\n{\n\u002F\u002F 输出一段礼貌的感谢语\necho \"\nHello, $name.\n\nThank you for your feedback. It is greatly appreciated.\n\nThanking you\n\n$MyName \n$MyEmailLink\n\";\n\u002F\u002F 最后mail出去\nmail($MyEmail, \"Feedback.\",\"\nName : $name\nE-mail : $email\nComment : $comment\n\");\n}\ninclude(\"include\u002Ffooter.inc\");\n?\u003E\n\n3.5 简单的站内搜索引擎\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E可以调用外部程序。在Unix环境下我们可以利用程序grep\u003Cem\u003E实现\u003C\u002Fem\u003E一个简单的搜索引擎。我们可以做的稍微复杂一些:使用一个页面既输出一个\u003Cem\u003E表单\u003C\u002Fem\u003E供用户输入搜索字串又输出查询结果。\n\n\n\u003CFORM ACTION=\"\" METHOD=\"POST\"\u003E\n\u003CINPUT TYPE=\"text\" NAME=\"searchstr\" value=\"\"\nSIZE=\"20\" MAXLENGTH=\"30\"\u003E\n\n\n\n\u003C?\nif ( ! empty($searchstr) )\n{\n\u002F\u002F empty()用来检查查询字串是否为空\n\u002F\u002F 如果不为空,调用grep查询\necho \"\n\";\n\u002F\u002F 调用grep对所有文件进行大小写非敏感模式的查询\n$cmdstr = \"grep -i $searchstr *\";\n$fp = popen( $cmdstr, \"r\" ); \u002F\u002F 执行命令并输出管道\n$myresult = array(); \u002F\u002F 存储查询结果\nwhile( $buffer = fgetss ($fp, 4096))\n{\n\u002F\u002F grep返回这样格式: 文件名:匹配字串出现行数\n\u002F\u002F 因此我们利用函数split()分离处理数据\nlist($fname, $fline) = split(\":\",$buffer, 2);\n\u002F\u002F 我们只输出第一次匹配的结果\nif ( !defined($myresult[$fname]))\n$myresult[$fname] = $fline;\n}\n\u002F\u002F 现在我们将结果存储在\u003Cem\u003E数组\u003C\u002Fem\u003E中,下面就可以处理并输出了\nif ( count($myresult) )\n{\necho \"\n\";\nwhile(list($fname,$fline) = each($myresult))\necho \"\n$fname : $fline \n\";\necho \"\n\";\n}\nelse\n{\n\u002F\u002F 如果没有查询结果\necho \"Sorry. Search on $searchstr\nreturned no results.\n\";\n}\npclose($fp);\n}\n?\u003E\n\n\n\n注释:\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E_SELF是\u003Cem\u003EPHP\u003C\u002Fem\u003E内建的变量。包含当前文件名。\nfgets()按行读取文件,最多4096(指定)字符长度。\nfgetss()与fgets()相似,只是解析输出的HTML标记。\nsplit()有一个参数是2,因为我们只需要把输出分成两部分。另外需要省略\":\"。\neach()是一个\u003Cem\u003E数组\u003C\u002Fem\u003E操作函数,用来更方便的遍历整个\u003Cem\u003E数组\u003C\u002Fem\u003E。\npopen()、pclose()与fopen()、fclose()的功能很相似,只是增加了管道处理。\n请注意以上的代码并不是\u003Cem\u003E实现\u003C\u002Fem\u003E一个搜索引擎的好办法。这只是有助于我们更好学习\u003Cem\u003EPHP\u003C\u002Fem\u003E而举出的一个例子而已。理想的情况是你应该建立一个包含关键字的数据库然后进行搜索\n\n\n四、与数据库链接\n\n通过\u003Cem\u003EPHP\u003C\u002Fem\u003E你可以轻松的连接到数据库,请求数据并将其显示在你的web站点中,甚至修改数据库中的数据。MySQL是一种很流行的数据库,并且在互联网中有许多有关\u003Cem\u003EPHP\u003C\u002Fem\u003E与MySQL的教程。MySQL是免费的,这一点也许就吸引了不少人。由于其广泛应用,我就不想在这里赘述MySQL的使用方法了。Oracle被大量在企业应用中采用,因此我们就利用Oracle来介绍\u003Cem\u003EPHP\u003C\u002Fem\u003E与数据库的连接。我们当然不会提及Oracle数据库的设计原理,原因是这已经超出了我们的讨论范围。\n\u003Cem\u003EPHP\u003C\u002Fem\u003E提供了两套函数与Oracle连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。如前所述,你的\u003Cem\u003EPHP\u003C\u002Fem\u003E安装选项应该可以支持两者的使用。\n想获得更多有关在Microsoft Windows平台上安装支持\u003Cem\u003EPHP\u003C\u002Fem\u003E3的Apache服务器的知识以及更多有关Oracle数据库的知识,请查阅以下URL:www.csoft.net\u002F~vsbabu\u002Farticles\u002Fora\u003Cem\u003Ephp\u003C\u002Fem\u003E.html。\n\n4.1 连接\n\n\u003C?\nif ($conn=Ora_Logon(\"user@TNSNAME\",\"password\"))\n{\necho \"SUCCESS ! Connected to database\n\";\n}\nelse\n{\necho \"Failed :-( Could not connect to database\n\";\n}\nOra_Logoff($conn);\n\u003Cem\u003Ephp\u003C\u002Fem\u003Einfo();\n?\u003E\n以上代码使用TNSNAME(在你的tnsnames.ora文件中指明)定义的Oracle数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ora_logon函数返回一个非零的连接ID并储存在变量$conn中。\n\n4.2 查询\n\n假设与数据库已经连接就绪,下面我们就来实际的应用对数据库的查询。下面的代码演示了一个连接并查询的典型例子:\n\u003C?\n\u002F*\n* 连接数据库并执行查询\n*\u002F\nfunction printoraerr($in_cur)\n{\n\u002F\u002F 检查Oracle是否出错\n\u002F\u002F 如果存在错误则显示\n\u002F\u002F 当指针被激活时每次请求Oracle后调用该函数\nif(ora_errorcode($in_cur))\necho \"Oracle code - \".ora_error($in_cur).\"\n\";\nreturn;\n}\n\u002F** 主程序 *\u002F\nif (!($conn=ora_logon(\"user@TNSNAME\",\"password\")))\n{\necho \"Connection to database failed\n\";\nexit;\n}\necho \"Connected as connection - $conn\n\";\necho \"Opening cursor ...\n\";\n$cursor=ora_open($conn); printoraerr($cursor);\necho \"Opened cursor - $cursor\n\";\n$qry=\"select user,sysdate from dual\";\necho \"Parsing the query $qry ...\n\";\nora_parse($cursor,$qry,0); printoraerr($cursor);\necho \"Query parsed \n\";\necho \"Executing cursor ...\n\";\nora_exec($cursor); printoraerr($cursor);\necho \"Executed cursor\n\";\necho \"Fetching cursor ...\n\";\nwhile(ora_fetch($cursor))\n{\n$user=ora_getcolumn($cursor,0); printoraerr($cursor);\n$sysdate=ora_getcolumn($cursor,1); printoraerr($cursor);\necho \" row = $user, $sysdate \n\";\n}\necho \"Fetched all records\n\";\necho \"Closing cursor ...\n\";\nora_close($cursor);\necho \"Closed cursor\n\";\necho \"Logging off from oracle... \n\";\nora_logoff($conn);\necho \"Logged off from oracle \n\";\n?\u003E\n(译者注:以上代码段缺少注释,请读者参考\u003Cem\u003EPHP\u003C\u002Fem\u003E Manual的Oracle数据库函数部分)\n\n4.3 显示结果\n\n以下代码演示了怎样查询数据库并将结果输出:\n\u003C?\nfunction printoraerr($in_cur, $conn)\n{\n\u002F\u002F 检查Oracle是否出错\n\u002F\u002F 如果存在错误则显示\n\u002F\u002F 当指针被激活时每次请求Oracle后调用该函数\n\u002F\u002F If it encountered an error, we exit immediately\nif(ora_errorcode($in_cur))\n{\necho \"Oracle code - \".ora_error($in_cur).\"n\";\nora_logoff($conn);\nexit;\n}\nreturn;\n}\n\nfunction exequery($w_qry,$conn)\n{\n$cursor=ora_open($conn); printoraerr($cursor,$conn);\nora_parse($cursor,$w_qry,0); printoraerr($cursor,$conn);\nora_exec($cursor); printoraerr($cursor,$conn);\n$numrows=0;\n$w_numcols=ora_numcols($cursor);\n\u002F\u002F 显示头部\necho \"\n\n\n\";\nfor ($i=0;$i\u003C$w_numcols;$i++)\n{\n$align=(ora_columntype($cursor,$i)==\"NUMBER\")?\"RIGHT\":\"LEFT\";\necho \"\t\".ora_columnname($cursor,$i).\"\n\";\n}\necho \"\n\";\nwhile(ora_fetch($cursor))\n{\necho \"\n\";\nfor ($i=0;$i\u003C$w_numcols;$i++)\n{\n$align=(ora_columntype($cursor,$i)==\"NUMBER\")?\"RIGHT\":\"LEFT\";\nif(ora_columntype($cursor,$i)==\"LONG\")\necho \"\".\nora_getcolumn($cursor,$i).\"\n\";\nelse\necho \"\".ora_getcolumn($cursor,$i).\"\n\";\nprintoraerr($cursor,$conn);\n}\n$numrows++;\necho \"\n\";\n}\nif ($numrows==0)\necho \"Query returned no records\n\n\";\nelse\n{\necho \"\n\";\necho \"Count\n\";\necho \"$numrows\n\";\necho \"\n\";\n}\necho \"\n\";\nora_close($cursor);\nreturn;\n}\n\n\u002F\u002F 主程序\nif(!($conn=ora_logon(\"user@SID\",\"password\")))\n{\necho \"Error: Cannot connect to database\n\";\nexit;\n}\n$qry=\"SELECT\ndeptno \\"Dept\\"\n,empno \\"Emp\\"\n,empnm \\"Name\\"\n,salary \\"Salary\\"\nFROM\nemployee\nORDER BY 1,2\";\nexequery($qry);\nora_logoff($conn);\n?\u003E\n(译者注:以上代码段缺少注释,请读者参考\u003Cem\u003EPHP\u003C\u002Fem\u003E Manual的Oracle数据库函数部分)\n\n4.4 基于HTTP的Oracle登录\n\n将以下代码加在\u003Cem\u003EPHP\u003C\u002Fem\u003E页面代码之前以确认Oracle登录。注意你必须正确设定$ SID。\n\u003C?\nif(!isset($\u003Cem\u003EPHP\u003C\u002Fem\u003E_AUTH_USER))\n{\nHeader(\"WWW-authenticate: basic realm=\\"$SID\\"\");\nHeader(\"HTTP\u002F1.0 401 Unauthorized\");\n$title=\"Login Instructions\";\necho \"\nYou are not authorized to enter the site\n \n\";\nexit;\n}\nelse\n{\nif (!($conn=ora_logon(\"$\u003Cem\u003EPHP\u003C\u002Fem\u003E_AUTH_USER@$SID\",$\u003Cem\u003EPHP\u003C\u002Fem\u003E_AUTH_PW)))\n{\nHeader(\"WWW-authenticate: basic realm=\\"$SID\\"\");\nHeader(\"HTTP\u002F1.0 401 Unauthorized\");\n$title=\"Login Instructions\";\necho \"\nYou are not authorised to enter the site\n \n\";\nexit;\n}\n}\n?\u003E\n\n五、其它功能\n\n5.1 生成图像\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E可以操作处理图像。如果你已经安装了GD库,你甚至可以利用\u003Cem\u003EPHP\u003C\u002Fem\u003E生成图像。\n\n(译者注:以上代码段缺少注释,请读者参考\u003Cem\u003EPHP\u003C\u002Fem\u003E Manual的图像处理函数部分)\n这段代码在其他页面中通过以下标记调用,然后以上的那段button.\u003Cem\u003Ephp\u003C\u002Fem\u003E3代码取得text值并在另外取得的图像文件中加上该值--在以上的代码中该图像文件是images\u002Fbutton1.gif--最后输出到浏览器。假如你想在\u003Cem\u003E表单\u003C\u002Fem\u003E域中使用图像按钮,但是又不希望在每次按钮上的文字改变后不得不重新生成新的图像,就可以利用这样简单的方法动态生成图像文件。\n\n5.2 Cookies\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E支持基于HTTP的cookies。在需要时你可以像使用一般变量一样方便的使用cookie。Cookies是浏览器保存于客户端的一些信息片段,由此你可以知道是否一台特定PC上的任何人都访问过你的站点,浏览者者在你的站点上的踪迹等等。使用cookies的典型例子就是对浏览者偏好的甄别。Cookies由函数setcookie()设定。与输出HTTP标头的函数header()一样,setcookie()必须在任何实际内容杯输出到浏览器之前调用。以下是一个简单例子:\n\u003C?\nif (empty($VisitedBefore))\n{\n\u002F\u002F 如果没有设定cookie,为cookie赋上当前时间值\n\u002F\u002F 函数中的最后一个参数声明了该cookie保存的时间\n\u002F\u002F 在这个例子中是1年\n\u002F\u002F time()函数返回自1970年1月1日以来的以秒数计的时间\nSetCookie(\"VisitedBefore\",time(), time()+(60*60*24*365));\n}\nelse\n{\n\u002F\u002F 欢迎浏览者再次光临\necho \"Hello there, welcome back\";\n\u002F\u002F 读取cookie并判断\nif ( (time() - $VisitedBefore) \u003E= \"(60*60*24*7)\" )\necho \"Why did you take a week to come back. You should be here more often!? \";\n}\n?\u003E\n\n5.3 基于HTTP验证\n\n基于HTTP验证当\u003Cem\u003EPHP\u003C\u002Fem\u003E以CGI模式运行时不能\u003Cem\u003E实现\u003C\u002Fem\u003E。我们可以使用函数header()发送HTTP标头强制验证,客户端浏览器则弹出供输入用户名和密码的对话框。这两个变量被储存在$\u003Cem\u003EPHP\u003C\u002Fem\u003E_AUTH_USER和$\u003Cem\u003EPHP\u003C\u002Fem\u003E_AUTH_PW中,你可以使用这两个变量验证合法并允许进入。以下的例子通过用户名称\u002F密码对为tnc\u002Fnature的验证一名用户的登录:\n\n事实上再实际引用中不大可能如上面使用代码段明显的用户名称\u002F密码对,而是利用数据库或者加密的密码文件存取它们。\n\n5.4 文件上传\n\n你可以利用\u003Cem\u003EPHP\u003C\u002Fem\u003E\u003Cem\u003E实现\u003C\u002Fem\u003E文件的功能,注意客户端的浏览器应该是Netscape3以上或者IE3以上。以下就是该功能的简单演示:\n( upload.html ):\n\n\nUpload Your File\n\n\n\n\n\n\n\n\n\n(You may notice a slight\ndelay while we upload your file.)\n\n\n\n下面是处理上传的文件:\n( receiver.\u003Cem\u003Ephp\u003C\u002Fem\u003E3 ):\n 2000000 )\n{\n$error_msg = \"Sorry, your file is too large.\";\nreturn;\n}\n$the_time = time ();\n\u002F\u002F 你需要对以下目录有写权限\n$upload_dir = \"\u002Flocal\u002Fuploads\";\n$local_file = \"$upload_dir\u002F$the_time\";\nif ( file_exists ( '$local_file' ) )\n{\n$seq = 1;\nwhile ( file_exists ( \"$upload_dir\u002F$the_time$seq\" ) ) { $seq++; }\n$local_file = \"$upload_dir\u002F$the_time$seq\";\n};\nrename ( $uploadfile, $local_file );\ndisplay_page ();\n}\nfunction display_page ()\n{\n\u002F\u002F 这里是你的页面内容\n}\n\n\n\u003Cem\u003Ephp\u003C\u002Fem\u003E3 Receiving Script\n\n\n\u003C?\nif ( $error_msg ) { echo \"$error_msg\"; }\nif ( $sendit )\n{\ndo_upload ();\n}\nelseif ( $cancelit )\n{\nheader ( \"Location: $some_other_script\" );\nexit;\n}\nelse\n{\nsome_other_func ();\n}\n?\u003E\n\n\n\n5.5 常用函数\n\n我们简单来看看一些常用的函数。\n\n\u003Cem\u003E数组\u003C\u002Fem\u003E\n\n\narray - 生成\u003Cem\u003E数组\u003C\u002Fem\u003E\ncount - \u003Cem\u003E数组\u003C\u002Fem\u003E元素个数\nsort - \u003Cem\u003E数组\u003C\u002Fem\u003E排序,另有其他几种排序函数可供使用\nlist - 列出\u003Cem\u003E数组\u003C\u002Fem\u003E元素\neach - 返回下一个key\u002Fvalue对\ncurrent - 返回当前\u003Cem\u003E数组\u003C\u002Fem\u003E元素\nnext,prev - 传回当前\u003Cem\u003E数组\u003C\u002Fem\u003E元素前后指针\n\n\n\n日期和时间\n\ncheckdate - 验证日期\u002F时间格式\ndate - 生成日期\u002F时间格式\ntime - 当前时间信息\nstrftime - 格式化日期\u002F时间\n\n目录、文件系统\n\nchdir - 改变目录\ndir - 目录类别\nopendir, readdir, closedir - 开启、读取、关闭目录\nfopen, fclose - 开启、关闭文件\nfgets, fgetss - 逐行读取内容\nfile - 将整个文件读入一个\u003Cem\u003E数组\u003C\u002Fem\u003E变量中\n\n正则表达式\n\nereg - 匹配正则表达式\neregi - 大小写非敏感匹配正则表达式\nereg_replace -匹配正则表达式并替换\neregi_replace -大小写非敏感匹配正则表达式并替换\nsplit - 依规则切开字符串并以\u003Cem\u003E数组\u003C\u002Fem\u003E形势存储\n\n\n\n字符串\n\nAddSlashes - 加上斜杠后使用字符串\necho - 输出一个或多个字符串\njoin, implode - 将\u003Cem\u003E数组\u003C\u002Fem\u003E元素合并为字符串\nhtmlentities, htmlspecialchars - 将HTML特殊字符转换为HTML标记形式\nsplit - 依规则切开字符串并以\u003Cem\u003E数组\u003C\u002Fem\u003E形势存储\n5.6 扩展我们的范例主页\n\n我们将使用以上提到的一些函数和思想为我们的范例主页添加更多的动态内容。我们可以在每个页面的顶部加上导航栏,同时使得当前页自动的不被链接显示;同时还可以添加一个用户验证\u003Cem\u003E表单\u003C\u002Fem\u003E以便上传音乐、图像等文件并自动更新页面。\n\n导航栏\n\n实际上就是在footer.inc文件中加上一段代码。假设你的web站点中所有后缀为.\u003Cem\u003Ephp\u003C\u002Fem\u003E3的文件都会出现在导航栏中,以下就是被存为include\u002Fnavbar.inc的代码:\n\u003C?\n\u002F* 输出该导航栏,链接所有除当前页的站内.\u003Cem\u003Ephp\u003C\u002Fem\u003E3文件 *\u002F\n# 读取目录\n$d = dir(\".\u002F\");\necho \" | \n\";\nwhile($entry = $d-\u003Eread())\n{\n\u002F\u002F 忽略无文件情况\nif ( !is_file($entry) )\ncontinue;\n\u002F* 将文件名与扩展名分开。由于.是正则表达式特殊字符,应该用\引出 *\u002F\nlist($filenm, $fileext) = split(\"\.\",$entry, 2);\n\u002F\u002F 忽略非.\u003Cem\u003Ephp\u003C\u002Fem\u003E3文件情况\nif( $fileext != \"\u003Cem\u003Ephp\u003C\u002Fem\u003E3\" )\ncontinue;\n\u002F* 现在我们已经把.\u003Cem\u003Ephp\u003C\u002Fem\u003E3文件都选出,下面搜寻文件中的第一行(标题)\n类似$title=\"something\";\n并将以上标题内容分开,用作链接文字 *\u002F\n$linknm = \"\";\n$fp=fopen($entry,\"r\");\nwhile($buffer=fgets($fp, 4096))\n{\n$buffer = trim($buffer);\n\u002F\u002F 我们已经把每个文件的标题放在文件的第一行以便搜索\n\u002F\u002F 但是当你改变变量名称时可能会带来大麻烦\nif (ereg(\"title *= *\\"\", $buffer))\n{\n\u002F* 我们已经取得了标题内容并可以在此基础上\n进行去除空格等处理。\n必须以\u003Cem\u003EPHP\u003C\u002Fem\u003E代码方式处理,比如$title = \"blah blah\" *\u002F\neval($buffer);\n\u002F\u002F 然后将链接文字显示为标题文字\n$linknm = $title;\nbreak;\n}\n}\nfclose($fp);\nif ( $entry == basename($\u003Cem\u003EPHP\u003C\u002Fem\u003E_SELF) )\necho \"$linknm\";\nelse\necho \"$linknm\";\necho \" | \";\n}\n$d-\u003Eclose();\necho \" \n\";\n?\u003E\n\n照片收藏夹\n\n我们将引用基于HTTP的验证、文件系统函数和文件上传功能维护放置图像文件的目录。\n同时我们需要建立一个可以列出在该目录下所有照片的页面。\n\n文件上传\n\u003C?\ninclude(\"include\u002Fcommon.inc\");\n\u002F\u002F 我们在这里再做一次用户验证\nif(!isset($\u003Cem\u003EPHP\u003C\u002Fem\u003E_AUTH_USER))\n{\nHeader(\"WWW-Authenticate: Basic realm=\\"$MySiteName\\"\");\nHeader(\"HTTP\u002F1.0 401 Unauthorized\");\necho \"Sorry, you are not authorized to upload files\n\";\nexit;\n}\nelse\n{\nif ( !($\u003Cem\u003EPHP\u003C\u002Fem\u003E_AUTH_USER==$MyName && $\u003Cem\u003EPHP\u003C\u002Fem\u003E_AUTH_PW==$MyPassword ) )\n{\n\u002F\u002F 如果是错误的用户名称\u002F密码对,强制再次认证\nHeader(\"WWW-Authenticate: Basic realm=\\"My Realm\\"\");\nHeader(\"HTTP\u002F1.0 401 Unauthorized\");\necho \"ERROR : $\u003Cem\u003EPHP\u003C\u002Fem\u003E_AUTH_USER\u002F$\u003Cem\u003EPHP\u003C\u002Fem\u003E_AUTH_PW is invalid.\";\nexit;\n}\n}\nif ( $cancelit )\n{\n\u002F\u002F 当浏览者按下\"取消\"按钮则转向首页面\nheader ( \"Location: front_2.\u003Cem\u003Ephp\u003C\u002Fem\u003E3\" );\nexit;\n}\nfunction do_upload () {\nglobal $userfile, $userfile_size, $userfile_name, $userfile_type;\nglobal $local_file, $error_msg;\nglobal $HTTP_REFERER;\nif ( $userfile == \"none\" ) {\n$error_msg = \"You did not specify a file for uploading.\";\nreturn;\n}\nif ( $userfile_size \u003E 2000000 )\n{\n$error_msg = \"Sorry, your file is too large.\";\nreturn;\n}\n\u002F\u002F Wherever you have write permission below...\n$upload_dir = \"photos\";\n$local_file = \"$upload_dir\u002F$userfile_name\";\nif ( file_exists ( $local_file ) ) {\n$error_msg = \"Sorry, a file with that name already exists\";\nreturn;\n};\n\u002F\u002F 你还可以由此检查文件名称\u002F类型对以确定是何种文件:gif,jpg,mp3…\nrename($userfile, $local_file);\necho \"The file is uploaded\n\";\necho \"Go Back\n\";\n}\n$title = \"Upload File\";\ninclude(\"include\u002Fheader.inc\");\nif (empty($userfile) || $userfile==\"none\")\n{\n\u002F\u002F 输出以下\u003Cem\u003E表单\u003C\u002Fem\u003E\n?\u003E\n\u003CFORM ACTION=\"\" ENCTYPE=\"multipart\u002Fform-data\" METHOD=POST\u003E\n\n\n\n\n\n\n(You may notice a slight delay while we upload your file.)\n\u003C?\n} else {\nif ( $error_msg ) { echo \"$error_msg\"; }\nif ( $sendit ) {\ndo_upload ();\n}\n}\ninclude(\"include\u002Ffooter.inc\");\n?\u003E\n\n照片图库\n\n\n\n\nHere are some of our family photos. This \u003Cem\u003EPHP\u003C\u002Fem\u003E script can really\nbe made better, by splitting into multiple pages.\n\nread())\n{\nif (is_file(\"photos\u002F$entry\"))\necho \"\n\";\n}\n$d-\u003Eclose();\n?\u003E\n\n\n另外,你可以在文件上传的\u003Cem\u003E表单\u003C\u002Fem\u003E中加上一个输入元素去描述该上传的文件。这个元素将被存储在文件中,然后被以上的照片图库的那段代码所读出并显示出来。\n\n六、网络资源\n\n你可以通过web上的众多资源更多的了解\u003Cem\u003EPHP\u003C\u002Fem\u003E3。许多邮件列表和书籍对你都非常有用。\n\n6.1 站点\n\n\u003Cem\u003EPHP\u003C\u002Fem\u003E的爆炸性流行使得一夜之间出现了很多基于\u003Cem\u003EPHP\u003C\u002Fem\u003E的站点,其中不少站点有在线教程、范例代码、技巧和提示等内容。\n\n\n国内\nhttp:\u002F\u002Fwww.\u003Cem\u003Ephp\u003C\u002Fem\u003Euser.com - \u003Cem\u003EPHP\u003C\u002Fem\u003E中文用户,也就是这里了\nhttp:\u002F\u002Fwww.\u003Cem\u003Ephp\u003C\u002Fem\u003Ex.com - 中国\u003Cem\u003EPHP\u003C\u002Fem\u003E联盟\nhttp:\u002F\u002Fwww.\u003Cem\u003Ephp\u003C\u002Fem\u003Esite.net - \u003Cem\u003EPHP\u003C\u002Fem\u003E专门站\nhttp:\u002F\u002Fwww.\u003Cem\u003Ephp\u003C\u002Fem\u003Echina.com - \u003Cem\u003EPHP\u003C\u002Fem\u003E CHINA\nhttp:\u002F\u002Fwww.cpcw.com\u002Fnetschool\u002Fhomepage\u002Fcgi\u002F - 电脑报网页陶吧\n国外\nhttp:\u002F\u002Fwww.\u003Cem\u003Ephp\u003C\u002Fem\u003E.net\u002F - \u003Cem\u003EPHP\u003C\u002Fem\u003E官方站点\nhttp:\u002F\u002Fwww.devshed.com\u002F - 极好的教程\nhttp:\u002F\u002Fpx.sklar.com - 代码交换\nhttp:\u002F\u002Fwww.\u003Cem\u003Ephp\u003C\u002Fem\u003Ebuilder.com\u002F - 教程、专栏和邮件列表档案\nhttp:\u002F\u002Fwww.weberdev.com\u002F - 文章和代码\nhttp:\u002F\u002Fwww.\u003Cem\u003Ephp\u003C\u002Fem\u003Ewizard.net\u002F - 提示与技巧\nhttp:\u002F\u002Fwww.iometrics.com\u002F\u003Cem\u003Ephp\u003C\u002Fem\u003E\u002F\u003Cem\u003Ephp\u003C\u002Fem\u003Elist.\u003Cem\u003Ephp\u003C\u002Fem\u003E3\u002F - IOMetrics scripts的档案\nhttp:\u002F\u002Fwww.e-gineer.com\u002F\u003Cem\u003Ephp\u003C\u002Fem\u003Ekb\u002F - \u003Cem\u003EPHP\u003C\u002Fem\u003E知识库\n\n6.2 邮件列表\n\n你可以在\u003Cem\u003EPHP\u003C\u002Fem\u003E官方站点的\"支持\"栏目内登记获得以下的邮件列表。值得注意的是这些都是高流量流表,一般每天会有100份e-mail。\n\n\n\u003Cem\u003Ephp\u003C\u002Fem\u003E3@lists.\u003Cem\u003Ephp\u003C\u002Fem\u003E.net - 主要的列表\n\u003Cem\u003Ephp\u003C\u002Fem\u003E-dev@lists.\u003Cem\u003Ephp\u003C\u002Fem\u003E.net - 主要针对开发者\n\u003Cem\u003Ephp\u003C\u002Fem\u003E-list@exp.com.cn - 本站的邮件列表,与论坛相通\n\n6.3 引人注目的工程\n\n一些基于\u003Cem\u003EPHP\u003C\u002Fem\u003E的工程已经发展得比较完善。其中一些更出色更引人注目的是:\n\nhttp:\u002F\u002F \u003Cem\u003Ephp\u003C\u002Fem\u003Elib.netuse.de - \u003Cem\u003EPHP\u003C\u002Fem\u003ELib,一整套\u003Cem\u003EPHP\u003C\u002Fem\u003E函数库\nhttp:\u002F\u002Fwww.phorum.org - Phorum是一个很完善的BBS系统\nhttp:\u002F\u002Fwww.fishcartsql.org - FishCartSQL是一个电子商务解决方案\nhttp:\u002F\u002Fwww.midgard-project.org - Midgard是一个网络应用开发平台\n\n\n\n\n\nGenerated by Bo-blog 2.0.2 sp2","createTime":"2010-04-24 18:52:44","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-2280094-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-2280094-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"2\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fquanquan_1989\u002F2280094\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-2280094-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713862001382_29045\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"2\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fquanquan_1989\u002F2280094\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-2-2280094-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713862001382_29045\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fcaterpillarxie\u002F10482197","title":"Web系统与技术 课程教材","desc":"国家级实验教学示范中心联席会计算机学科规划教材\n教育部高等学校计算机类专业教学指导委员会推荐教材\n面向“工程教育认证”计算机系列课程规划教材\n\n谢从华,高蕴梅,黄晓华.Web系统与技术[M],清华大学出版社,2018年6月\n\n第1章 Web系统与技术的基础知识... 1\n\n1.1 Internet介绍... 1\n\n1.1.1 Internet含义... 1\n\n1.1.2 TCP\u002FIP协议... 1\n\n1.1.3 域名... 2\n\n1.1.4 URL. 3\n\n1.1.5 MIME. 3\n\n1.1.6 HTTP协议... 4\n\n1.2 Web浏览器... 5\n\n1.3 Web服务器... 5\n\n1.3.1 Web服务器... 5\n\n1.3.2 Apache服务器... 5\n\n1.3.3 IIS服务器... 6\n\n1.4系统的主要技术概述... 7\n\n1.4.1 HTML 概述... 7\n\n1.4.2 JavaScript概述... 8\n\n1.4.3 XML概述... 8\n\n1.4.4 \u003Cem\u003EPHP\u003C\u002Fem\u003E概述... 8\n\n1.4.5 Ajax概述... 9\n\n1.5习题... 9\n\n第2章 HTML网页设计基础... 10\n\n2.1 HTML 网页... 10\n\n2.1.1 简介... 10\n\n2.1.2 HTML文件结构... 10\n\n2.1.3 文件编辑器... 12\n\n2.2 HTML基本标签... 13\n\n2.2.1 元信息标签<Meta>. 13\n\n2.2.2 文本标签... 18\n\n2.2.3 列表标签... 20\n\n2.2.4 表格标签... 24\n\n2.2.5 超级链接标签... 27\n\n2.2.6 图像标签... 29\n\n2.2.7 背景声音标签... 29\n\n2.2.8 视频标签... 29\n\n2.3 网页\u003Cem\u003E表单\u003C\u002Fem\u003E和控件... 30\n\n2.3.1 \u003Cem\u003E表单\u003C\u002Fem\u003E标签<form>. 30\n\n2.3.2 \u003Cem\u003E表单\u003C\u002Fem\u003E的控件... 31\n\n2.3.3 获取\u003Cem\u003E表单\u003C\u002Fem\u003E数据... 37\n\n2.4 框架标签... 39\n\n2.4.1 帧标记<frame>. 39\n\n2.4.2 IFRAME标记... 40\n\n2.5 习题... 40\n\n第3章 CSS样式设计... 43\n\n3.1 CSS 简介... 43\n\n3.2 CSS 语法与使用... 43\n\n3.2.1 CSS定义语法... 43\n\n3.2.2 CSS的使用... 44\n\n3.2.3 选择符... 48\n\n3.3 CSS样式设计... 51\n\n3.3.1字体样式... 51\n\n3.3.2文本样式... 53\n\n3.3.3颜色样式... 56\n\n3.3.4 列表样式... 57\n\n3.3.5表格样式... 60\n\n3.4.6 鼠标样式... 64\n\n3.4.7 滤镜样式... 67\n\n3.4 CSS页面布局... 78\n\n3.4.1 文本对齐... 78\n\n3.4.2盒子模型... 81\n\n3.4.3文字环绕float样式... 85\n\n3.4.4 元素定位... 86\n\n3.6 习题... 88\n\n第4章 网页数据的有效性验证... 92\n\n4.1验证控件... 92\n\n4.1.1 验证控件分类... 92\n\n4.1.2 ASP页面验证控件... 92\n\n4.2 正则表达式... 102\n\n4.2.1常用的元字符... 102\n\n4.2.2 复杂的正则表达式... 102\n\n4.3 正则表达式应用... 104\n\n4.3.1 RegExp对象... 104\n\n4.3.2 String 对象的正则表达式方法... 106\n\n4.4 常见的正则表达式... 107\n\n4.5 习题... 108\n\n第5章 JavaScript编程技术... 109\n\n5.1 JavaScript编程基础... 109\n\n5.1.1 JavaScript简介... 109\n\n5.1.2 Javascript的使用方法... 109\n\n5.1.3 语法规则... 111\n\n5.1.4 运算符和表达式... 112\n\n5.1.5 函数... 117\n\n5.1.6流程控制... 121\n\n5.1.7 事件处理... 128\n\n5.2 JavaScript对象编程... 130\n\n5.2.1 Object 类型... 131\n\n5.2.2 Array对象... 131\n\n5.2.3 String对象... 133\n\n5.2.4 Math对象... 138\n\n5.2.5 Number对象... 142\n\n5.2.6 Data对象... 143\n\n5.3 JavaScript ActiveX编程技术... 145\n\n5.3.1 FileSystemO","createTime":"2018-06-16 12:55:52","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-10482197-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-10482197-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"3\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fcaterpillarxie\u002F10482197\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-10482197-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713862001382_29045\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"3\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fcaterpillarxie\u002F10482197\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-3-10482197-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713862001382_29045\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fsuper_zhaowenke\u002F2190657","title":"ExtAspNet v2.2.1 (2009-4-1) 值得一看","desc":"ExtAspNet v2.2.1\n\t\nExtAspNet是一组专业的\u003Cem\u003EAsp.net\u003C\u002Fem\u003E控件库,拥有原生的AJAX支持和丰富的UI效果,\n目标是创建没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。\n\n支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+\n\n注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。\n\n示例: http:\u002F\u002Fext\u003Cem\u003Easp.net\u003C\u002Fem\u003E\u002F\n开源: http:\u002F\u002Fextaspnet.codeplex.com\u002F\n博客: http:\u002F\u002Fsanshi.cnblogs.com\u002F\n邮箱: sanshi.ustc@gmail.com\n\n\n发布历史:\n\n+2010-03-28 v2.2.1\n\t+为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 \n\t\t-修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。\n\t-修正basic\u002Fhello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。\n\t-隐藏示例首页最外层RegionPanel的边框ShowBorder=\"false\"。\n\t+集成Extjs最新版本v3.1.1。\n\t\t-增加一个新的Theme - Access。\n\t\t-修正了Firefox下Zoom In\u002FOut时页面消失的BUG。\n\t\t-删除Panel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。\n\n\n\n+2010-01-31 v2.2.0\n\t-使得\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的控件ImageButton具有和\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的Button控件类似的行为(Ajax提交)(feedback:261629698)。\n\t+TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip控件动态增加删除Tab。\n\t\t-增加示例tabstrip\u002Ftabstrip_addtab.aspx。\n\t-重构了示例网站的架构,目前只有一层IFrame结构。\n\t-为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。\n\t-为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal=\"false\")(feedback:zqmars)。\n\t-Window控件更新。\n\t\t-关闭按钮默认直接关闭,不会弹出确认对话框。\n\t\t-GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。\n\t\t-增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。\n\t\t-修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。\n\t-删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon=\"Close\",现在需要这样定义Icon=\"SystemClose\"。\n\t-WindowPosition默认居中,而不是黄金分割位置。\n\t+Button, Window等控件弹出位置属性的变化。\n\t\t-Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target=\"_self\" -\u003E Target=\"Self\", Target=\"_parent\" -\u003E Target=\"Parent\"。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。\n\t\t-Confirm.GetShowReference的最后一个参数target变为枚举类型。\n\t\t-Alert.GetShowReference中的showInParent参数也变为Target枚举类型。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制\u003Cem\u003E表单\u003C\u002Fem\u003E验证失败时提示对话框的显示位置。\n\n\n\n+2010-01-06 v2.1.9\n\t-集成Extjs最新版本v3.1.0。\n\t-修正灰色皮肤的CSS问题。\n\t-修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。\n\t-为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。\n\t-修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。\n\t-Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle=\"float:left;\"属性。\n\t-修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。\n\t-为TriggerBox和TwinTriggerBox增加EnableEdit属性。\n\t-使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性)。\n\t-使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。\n\t-Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。\n\t-增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。\n\t-修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。\n\t-修正HtmlEditor不能编辑的BUG(feedback:TheBox)。\n\t-修正IE下有时会出现空白页面的情况(feedback:olivia919)。\n\t\n\t\n\n+2009-12-06 v2.1.8\n\t-修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。\n\t-修正了IE下Grid中的一个JS问题(feedback:lqm4108)。\n\t-修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。\n\t+集成extjs3.0.3。\n\t\t-修正弹出对话框的宽度计算错误(会保持最小的状态)。\n\t\t-增加新的皮肤Gray。\n\t-为示例工程添加改变语言和皮肤的下拉列表。\n\t-为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。\t\n\n\n\n+2009-12-01 v2.1.7\n\t-增加示例(iframe\u002Fparent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。\n\t-修正一些书写错误(feedback:bmck)。\n\t-从Region控件中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。\n\t-BorderPanel更名为RegionPanel。\n\t-DropDownList拥有MarkInvalid方法(feedback:sun1299shine)。\n\t-增加中国的省市县三级联动示例(data\u002Fshengshixian.aspx)(feedback:Blues T)。\n\t-修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。\n\t-修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。\n\t\n\t\n\t\n+2009-11-26 v2.1.6\n\t+修正动态创建Grid列的BUG(feedback:gxpan)。\n\t\t-增加示例(data\u002Fgrid_dynamic_columns.aspx)。\n\t-修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。\n\t-增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。\n\t-为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。\n\t-重新设计模拟树的下拉列表的\u003Cem\u003E实现\u003C\u002Fem\u003E,避免选中某项后的闪烁。\n\t\t\t\n\n\n+2009-11-21 v2.1.5\n\t+Tree优化。\n\t\t-修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。\n\t\t-GetNodeById更名为FindNode,保持和FindControl一致命名。\n\t\t-删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。\n\t\t-删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。\n\t\t-增加示例(data\u002Ftree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。\n\t\t+TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。\n\t\t\t-同时更名的还有GridColumn的ColumnId-\u003EColumnID,GetColumnId-\u003EGetColumnID。\n\t\t\t-Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。\n\t\t-为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。\n\t-为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。\n\t-增加示例(other\u002Fcustom_postback.aspx)(feedback:thebox)。\n\t\t-如何自定义Javascript脚本和C#处理函数来响应键盘事件。\n\t-为Tree增加AutoLeafIdentification属性。\n\t\t-增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。\n\t\n\t\n\n+2009-11-17 v2.1.4\n\t-修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。\n\t-部分ExtAspNet控件的设计时支持(会在后续版本中逐步完善)。\n\t-v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。\n\t-修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack-\u003EAutoPostBack, Event PostBack-\u003EEnablePostBack)。\n\t-为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(feedback:dk3214)。\n\t+为\u003Cem\u003E表单\u003C\u002Fem\u003E字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。\n\t\t-为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。\n\t+为\u003Cem\u003E表单\u003C\u002Fem\u003E字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。\n\t\t-增加示例:form\u002Fform_validate.aspx\n\t\n\t\n\n+2009-10-19 v2.1.3\n\t+增加支持在AJAX时改变的控件属性列表(\u002Fajax.aspx)。\n\t\t-ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。\n\t-加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)。\n\t-在AJAX回发后确保\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的按钮控件仍然具有AJAX的特性。\n\t-更新\u002Fbasic\u002Flogin.aspx示例,使用验证图片(feedback:kedee)。\n\t-为Grid增加AutoPostBack属性和RowClick事件,示例在\u002Fdata\u002Fgrid_autopostback.aspx(feedback:chenguizhu2006)。\n\t-为所有的\u003Cem\u003E表单\u003C\u002Fem\u003E字段增加AJAX属性ReadOnly(feedback:skydb)。\n\t-Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。\n\t\n\t\n\n+2009-09-27 v2.1.2\n\t-为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。\n\t-修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。\n\t-增加pt_BR语言,由Ujvari提供。\n\t+为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。\n\t\t-如果Panel具有IconUrl属性,则IconUrl优先于Icon。\n\t\t-所有Icon的列表在icon.aspx。\n\t-为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。\n\t\n\t\n\n+2009-09-15 v2.1.1\n\t-修正不能动态修改AccordionPane属性Items的BUG。\n\t+为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。\n\t\t-如果需要在父页面弹出确认对话框,需要设置ConfirmTarget=\"_parent\"(类似Window控件的Target=\"_parent\")。\n\t+为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。\n\t\t-一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。\n\t\t-ExtAspNet.Alert.Show(\"参数错误!\", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());\n\t+TreeNode的前面的多选框可以自动回发了。\n\t\t-为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。\n\t\t-示例在:http:\u002F\u002Fext\u003Cem\u003Easp.net\u003C\u002Fem\u003E\u002Fdata\u002Ftree_run.aspx\n\t-Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。\n\t-修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。\n\t-添加定时器控件Timer,用来定时发起AJAX请求。\n\t\n\t\n\n+2009-09-06 v2.1.0\n\t-Button的Pressed属性值能够正确的反映客户端的变化。\n\t-优化Tree控件的AJAX\u003Cem\u003E实现\u003C\u002Fem\u003E。\n\t+为页面的Form添加autocomplete=\"off\"属性。\n\t\t-参考http:\u002F\u002Fwww.cnblogs.com\u002Fsanshi\u002Farchive\u002F2009\u002F09\u002F04\u002F1560146.html#1635830\n\t+添加对extjs3.0中所有语言的支持。\n\t\t-ExtAspNet扩展的多语言包在js\\languages\\extaspnet目录下,目前只有en,zh_CN,zh_TW三种\u003Cem\u003E实现\u003C\u002Fem\u003E\n\t\t-你可以向其中添加自己的语言版本,并执行js\\languages下的pack.bat打包,最后编译工程。\n\t\n\t\n\t\n+2009-09-01 v2.0.9\n\t-为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。\n\t+在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。\n\t\t-这将会影响所有的aspx页面,所以要特别关注。\n\t-重命名AccordionPanel为AccordionPane (这也是在\u003Cem\u003EAsp.net\u003C\u002Fem\u003E AJAX中使用的名称).\n\t+所有的面板默认有两个集合属性(Toolbars和Items).\n\t\t-尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的).\n\t\t-这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。\n\t-祝你生日快乐 - 小师妹妹。\n\n\n\n+2009-08-29 v2.0.8\n\t-ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。\n\t-将所有的示例转化为英语版本。\n\t-修正Tree控件的一个BUG(定义Mappings属性时)。\n\t+PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。\n\t -这个BUG导致\u003Cem\u003EAsp.net\u003C\u002Fem\u003E compatibility中的示例无法完成,现在已经修正。\n\t+去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。\n\t -这个属性和Button得ValidateForms属性类似,可以查看\u003Cem\u003EAsp.net\u003C\u002Fem\u003E compatibility中的示例。\n\t\n\t\n\n+2009-08-25 v2.0.7\n -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。\n -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。\n -增加示例-如何将Grid控件导出为Excel(data\\grid_excel_run.aspx)(feedback:503684912)。\n -如果TreeNode的属性Enabled=\"false\",则此项变灰并且不会被选中(feedback:your568)。\n -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~\u002F开头)的BUG。\n -增加Accordion和Tree配合使用的示例(other\\accordion_tree_run.aspx)。\n -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。\n +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。\n\t\t-这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。\n\t\t-简单方便,示例可以参考 default.aspx 或者 other\\accordion_tree_run.aspx。\n \n \n\n+2009-08-14 v2.0.6\n\t-动态生成菜单实例(other\\menu_dynamic_run.aspx和other\\menu_dynamic2_run.aspx)(feedback:shguo)。\n\t-优化AJAX的内部\u003Cem\u003E实现\u003C\u002Fem\u003E,每个页面保存的ViewState现在减少1\u002F3左右(重要更新)。\n\t-优化Tree节点的NodeId自动生成,减少ViewState占用。\n\t\n\n\n+2009-08-09 v2.0 beta5\n\t+ExtAspNet和\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的提交按钮兼容问题(feedback:千帆)。\n\t\t-在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的按钮AJAX提交,必须设置UseSubmitBehavior=\"false\"\n\t\t--也就是说生成的input的type不能是\"submit\",而这个限制在有些情况下是不可原谅的。\n\t\t--我们做了优化,现在要使一个\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。\n\t+PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的\u003Cem\u003EAsp.net\u003C\u002Fem\u003E控件了。\n\t\t-在Page_Load中设置了哪些需要在AJAX中更新的\u003Cem\u003EAsp.net\u003C\u002Fem\u003E控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。\n\t\t-示例在aspnet\\fckeditor_run.aspx和aspnet\\aspnet_run.aspx。\n\t\t-FCKEditor和上传控件兼容。示例在aspnet\\fileupload_run.aspx。\n\t-修正ToolbarText的文本在AJAX下更新的BUG。\n\t-Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。\n\t-更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。\n\t\n\n\n+2009-08-02 v2.0 beta4\n\t+和\u003Cem\u003EAsp.Net\u003C\u002Fem\u003E的Forms Authentication兼容[feedback:mgzhenhong]。\n\t\t-采用和\u003Cem\u003EAsp.Net\u003C\u002Fem\u003E Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。\n\t\t-现在支持Response.Redirect,你可以选择Response.Redirect或者ExtAspNet.PageContext.Redirect重定向页面,两者效果一样。\n\t\t-支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。\n\t-Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。\n\t-修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。\n\t-修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。\n\t-增加Menu和Accordion的示例。\n\t-修正Window控件的IconUrl有时不显示(Target=\"_parent\")的BUG[feedback:xmq&mgzhenhong]。\n\t\n\n\n+2009-07-22 v2.0 beta3\n\t-兼容FCKEditor。\n\t-在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。\n\t\n\n\n+2009-07-13 v2.0 beta2\n\t-集成extjs最新版本v3.0。\n\t+兼容IE6.0-7.0-8.0。\n\t\t-这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。\n\t\t-目前先禁用IE6.0-7.0的QuickTips。\n\t-优化底层JavaScript。\n\t\n\t\n\t\n+2009-07-05 v2.0 beta1\n\t-更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。\n\t-使用YUI Compressor压缩JavaScript和CSS文件。\n\t-Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。\n\t-ExtAspNet自身的CSS会紧挨着页面\u003Ctitle\u003E标签引入,这样在\u003Chead\u003E中自定义的样式可以覆盖ExtAspNet缺省样式。\n\t+Alert对话框会遮挡所有的Window窗口。\n\t\t-使用一个变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。\t\n\t-为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。\n\t-因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。\n\t-重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。\n\t-更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。\n\t-更新示例工程。\n\t\n\t\n\n+2009-03-25 v1.3.1\n\t-Tree在AJAX回发展开节点时JS错误[feedback:xlli]。[fixed]\n\t-Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。[fixed]\n\t-页面包含FileUpload控件,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet\u002Ffileupload.aspx)[fixed]\n\t-HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。[fixed]\n\t\n\t\n\n+2009-03-03 v1.3.0\n\t-如果弹出的窗口(Ext-Window)含有\u003Cem\u003EASP.NET\u003C\u002Fem\u003E控件FileUpload,则此弹出窗口在关闭时出现JS错误(http:\u002F\u002Fextjs.com\u002Fforum\u002Fshowthread.\u003Cem\u003Ephp\u003C\u002Fem\u003E?t=8129)[feedback:xlli]。[fixed]\n\t-如果页面中存在\u003Cem\u003EASP.NET\u003C\u002Fem\u003E控件(TextBox),则第二次提交\u003Cem\u003E表单\u003C\u002Fem\u003E就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。[fixed]\n\t-页面上放置ExtAspNet-Button和\u003Cem\u003EASP.NET\u003C\u002Fem\u003E-Button,则点击ExtAspNet-Button时激发的是\u003Cem\u003EASP.NET\u003C\u002Fem\u003E-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的\u003Cem\u003E实现\u003C\u002Fem\u003E有关。[fixed]\n\t-ExtAspNet内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。[added]\n\t+如果以前你听过不要在ExtAspNet工程中使用\u003Cem\u003EASP.NET\u003C\u002Fem\u003E标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet控件和\u003Cem\u003EASP.NET\u003C\u002Fem\u003E标准控件和平共处了。[fixed]\n\t\t-如果一个\u003Cem\u003EASP.NET\u003C\u002Fem\u003E按钮控件要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior=\"false\" 即可。\n\t\t-如果要在一次ExtAspNet的原生AJAX回发时更新\u003Cem\u003EASP.NET\u003C\u002Fem\u003E控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet\u002Faspnet.aspx)。\n\n\n\n+2009-02-27 v1.2 beta9\n\t-网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed]\n\t-自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed]\n\t+系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed]\n\t\t-底层使用Javascript创建一个Window控件的代码由原来的2000字符减少为500个字符。\t\n\t\t-PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中\u003Cem\u003E表单\u003C\u002Fem\u003E修改的确认提示框的脚本”。\n\t\t---[updated]删除PageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference\u002FGetConfirmFormModifiedCloseRefreshReference\u002FGetConfirmFormModifiedClosePostBackReference三个方法代替。\n\t\t-不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了\u003Cem\u003E实现\u003C\u002Fem\u003E功能为每个弹出页面添加box_parent_client_id查询字符串\n\t\t-去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能\u003Cem\u003E实现\u003C\u002Fem\u003E为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。\n\t\t---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误!\n\t\t-A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。\n\t\t---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。\n\t\t-Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中\u003Cem\u003E表单\u003C\u002Fem\u003E改变,然后关闭弹出窗口的客户端脚本”。\n\t\t---为Window控件增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认\u003Cem\u003E表单\u003C\u002Fem\u003E改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。\n\t\t---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断\u003Cem\u003E表单\u003C\u002Fem\u003E是否更新,然后在关闭窗口。\n\t\t---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。\n\t\t-如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。\n\t\t---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。\n\t\t-Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。\n\t\t-CurrentActiveWindow改名为ActiveWindow。\n\t\t-[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values)\n\t\t---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。\n\t\t\n\t\n\n+2009-02-23 v1.2 beta8\n\t-ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed]\n\t-DropDownList在Ajax回发时不能计算模拟树的数据[feedback:huihuang]。[fixed]\n\t-DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。[fixed]\n\t-升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed]\n\t-页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。[added]\n\t+增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed]\n\t\n\t\n\n+2008-10-28 v1.2 beta7\n\t-DropDownList没有选中任何一项,回发时报错[feedback:huihuang]。[fixed]\n\t-Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed]\n\t+PageContext优化。[fixed]\n\t\t-去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。\n\t\t-去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。\n\t\t-Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。\n\t-Image控件增加ImageWidth\u002FImageHeight\u002FImageCssStyle\u002FImageCssClass\u002FImageAlt属性[feedback:jqpeng]。[fixed]\n\t-发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。[fixed]\n\t-ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed]\n\t-Row和Column布局时,修正IE下设置RowHeight=\"100%\"时显示不正确的BUG。[fixed]\n\t-AccordionLink当鼠标移上和移开时,有背景色的变化效果[feedback:huihuang]。[fixed]\n\t+TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。[fixed]\n\t\t-有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。\n\t\n\t\n\n+2008-10-20 v1.2 beta6\n\t+使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed]\n\t\t-需要替换新的blowery.Web.HttpCompress.dll,解决方案见http:\u002F\u002Fpohee.com\u002Fit\u002Fhttp-compression-in-aspnet-20\u002F。\n\t+DropDownList优化。[fixed]\n\t\t-去除EnableFirstItem\u002FFirstItemText\u002FFirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。\n\t\t 现在可以方便的在后台DropDownList1.Items.Insert(0, new ExtAspNet.ListItem(\"全部\", \"-1\"));来达到同样的效果。\n\t\t+如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。\n\t\t\t-和\u003Cem\u003EAsp.net\u003C\u002Fem\u003E中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = \"\";\n\t\t-ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。\n\t-处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed]\n\t-注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding\u002Fborder-width\u002Fmargin)。[fixed]\n\t+为所有控件属性增加在VS中的智能提示。[fixed]\n\t\t-需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。\n\t+控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。[fixed]\n\t\t-TriggerIconType.Default -\u003E TriggerIconType.None\n\t\t-SystemIconType.Empty -\u003E SystemIconType.None\n\t\t-RegexPattern.USER_DEFINED -\u003E RegexPattern.None\n\t-\u003Cem\u003E表单\u003C\u002Fem\u003E验证属性名称变化(ValueToCompare-\u003ECompareValue,ControlToCompare-\u003ECompareControl)。[fixed]\n\t+注意:一个属性可以拥有多个值的情况。[fixed]\n\t\t-属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。\n\t\t-其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。\n\t+AccordionLink\u003Cem\u003E实现\u003C\u002Fem\u003E为控件。[fixed]\n\t\t-可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion-\u003EAccordionLink)(示例在other\u002Faccordion_links_run.aspx,other\u002Faccordion_links_run_iframe_htm)[feedback:jima]。\n\t+确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form\u002Fform_dynamic_run.aspx)。[fixed]\n\t\n\t\n\t\n+2008-10-15 v1.2 beta5\n\t-验证\u003Cem\u003E表单\u003C\u002Fem\u003E字段的ValueToCompare属性,为字符串时会出错的BUG。[fixed]\n\t+优化下拉列表。[fixed]\n\t\t-验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。\n\t\t-DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。\n\t\t-DropDownList不支持EmptyText属性。\n\t\t-ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。\n\t\t-DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。\n\t\n\t\n\n+2008-09-27 v1.2 beta4\n\t+EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other\u002Faccordion_run.aspx)。[fixed]\n\t\t-Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。\n\t\t-影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。\n\t-AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed]\n\t+AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other\u002Faccordion_links_run.aspx)。[fixed]\n\t\t-原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上\u003CItems\u003E标签。\n\t\t-适当增大AccordionPanel中链接的高度20px-\u003E22px,同时对链接的样式也做了微调。\n\t\t-通过BodyPadding控制链接列表的边距。\n\t\t-这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需求由马季提出。\n\t\n\t\n\t\n+2008-09-25 v1.2 beta3\n\t+代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。[fixed]\n\t\t-Panel\u002FGroupPanel\u002FContentPanel\u002FTree\u002FHiddenField\u002FPageLoading\n\t\t-TabStrip\u002FToolbar\n\t-TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed]\n\t-向Form中动态添加控件的BUG,现在form\u002Fform_dynamic_run.aspx示例已经能正确运行。[fixed]\n\t+大部分容器的子控件集合更正为Items(以前有些是Rows)。[fixed]\n\t\t-影响的控件包括Toolbar\u002FAccordion\u002FAccordionPanel\u002FGroupPanel\u002FPanel\u002FSimpleForm\u002FWindow等。\n\t\t-保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。\n\t\t-保留TabStrip的Tabs(TabCollection)属性。\n\t\t-保留PageLayout\u002FBorderLayout的Regions(RegionCollection)属性。\n\t-预祝今晚神七发射成功。\n\t\n\t\n\t\n+2008-09-22 v1.2 beta2\n\t+Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed]\n\t\t-表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时\u003Cem\u003E数组\u003C\u002Fem\u003E越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。\n\t+代码优化与设计时支持(示例中\u003Cem\u003E表单\u003C\u002Fem\u003E控件都已支持设计)。[fixed]\n\t\t-PageManager\u002FSimpleForm\u002FButton\u002FHyperLink\u002FLabel\u002FImage\u002FLinkButton\u002FTextBox\n\t\t-TriggerBox\u002FTwinTriggerBox\u002FWindow\u002FTextArea\u002FHtmlEditor\u002FDatePicker\u002FNumberBox\n\t\t-CheckBox\u002FRadioButton\u002FRadioButtonList\u002FDropDownList\n\t\t-Grid\n\n\n\n+2008-09-19 v1.2 beta1\n\t-Image\u002FLinkButton\u002FHyperLink增加一些Ajax可更新属性。[fixed]\n\t+隐藏的方式由HideMode属性控制Visibility\u002FOffsets\u002FDisplay。[fixed]\n\t\t-修正Form\u002FSimpleForm中隐藏一个\u003Cem\u003E表单\u003C\u002Fem\u003E字段(Hidden=false)会占据页面空间的BUG。\n\t-ToolbarText\u002FToolbarFill\u002FToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed]\n\t-Button去除MarginRight属性(可以通过CssStyle=\"margin-right:5px;\"达到相同的效果)[fixed]\n\t\n\t\n\t\n+2008-09-09 v1.1\n\t+Toolbar去除IsPageMenu属性,在网报中可以用自定义样式\u003Cem\u003E实现\u003C\u002Fem\u003E,而不应该写在控件中。[fixed]\n\t\t-网报:CssClass=\"toolbar-pagemenu\" CssStyle=\"border:0px;\",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(..\u002Fimages\u002Fpagemenu_toolbar_background.gif) repeat-x left top;}。\n\t-Region去除默认的Layout=Fit,如果希望Region使用Fit\u002FAnchor\u002FColumn\u002FRow等布局的话,需要手工指定。[fixed]\n\t-ToolbarSeparator\u002FToolbarFill在Ajax更新Hidden属性的BUG。[fixed]\n\t+布局整理。[fixed]\n\t\t-新增Column\u002FAbsolute\u002FRow三种布局,加上以前的Container\u002FFit\u002FAnchor\u002FAccordion\u002FBorder\u002FForm六种布局,总共有9中布局可供使用。\n\t\t-其中一些控件默认使用一种布局:SimpleForm(Form)\u002FForm(Form)\u002FPanel-GroupPanel(Container)\u002FAccordion(Accordion)\u002FPageLayout(Border)\u002FBorderLayout(Border)\u002FTabStrip(Card),所有布局控件默认的布局是Container。\n\t\t-经常用到的布局控件:SimpleForm\u002FForm\u002FAccordion\u002FTabStrip\u002FBorderLayout,经常用到的布局:Fit\u002FRow\u002FAnchor\n\t\n\t\n\t\n+2008-09-08 v1.1 beta7\n\t-MenuButton\u002FMenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick=\"false\" CssStyle=\"cursor:default;\" [feedback:huayu]。[fixed]\n\t-MenuButton\u002FMenuHyperLink\u002FMenuSeparator\u002FMenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed]\n\t+大部分的ExtAspNet控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。[fixed]\n\t\t-注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。\n\t\t-US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。\n\t\t-网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏\u003Cem\u003E表单\u003C\u002Fem\u003E字段,现在也可以使用Ajax了。\n\n\n\n+2008-09-04 v1.1 beta6\n\t-PageContext.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed]\n\t+模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed]\n\t\t-因为if(\"0,2,9,11,\".indexOf('1,')\u003E=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。\n\t\t-解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) \u003E= 0){ok}。\n\t-DropDownList在Ajax时应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed]\n\t-Button\u002FMenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed]\n\t-Tree的Ajax支持(尚需优化)。[fixed]\n\t\n\t\n\n+2008-09-02 v1.1 beta5\n\t-DropDownList如果第一次没有绑定值,应该绑定到[[]](二维\u003Cem\u003E数组\u003C\u002Fem\u003E),而不是[](一维\u003Cem\u003E数组\u003C\u002Fem\u003E)。[fixed]\n\t-模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField\u002FDataValueField\u002FDataSimulateTreeLevelField\u002FDataEnableSelectField等属性的值,否则Ajax回发时会出错)。[fixed]\n\t-UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。[fixed]\n\t-不要使用\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的控件HiddenField,而是使用ExtAspNet的HiddenField,因为\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed]\n\t-网报Ajax整合基本完成(除了待审批-\u003E下一步[审核\u002F归档\u002F出纳]操作,由于需要显示隐藏\u003Cem\u003E表单\u003C\u002Fem\u003E字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed]\n\t-IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。[fixed]\n\t-增加两个Theme[Slate\u002FBlack](样式尚需完善)。[fixed]\n\t\n\t\n\t\n+2008-09-01 v1.1 beta4\n\t-非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed]\n\t-RadioButtonList去除EnableBackgroundColor\u002FEnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm\u002FForm)的背景色一致。[fixed]\n\t-TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed]\n\t-Web.config中增加配置项FormLabelWidth=\"80\"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm\u002FForm的\u003Cem\u003E表单\u003C\u002Fem\u003E字段标题的宽度。[fixed]\n\t+完善Ajax。[fixed]\n\t\t-RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue\u002FSelectedItem)。\n\t\t-DropDownList增加Ajax可更新属性Enable\u002FSelectedIndex(SelectedValue\u002FSelectedItem)\u002FDataSource。\n\t\t-Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。\n\t\t-ToolbarText增加Ajax可更新属性Text。\n\t\t\n\t\t\n\t\t\n+2008-08-31 v1.1 beta3\n\t-TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed]\n\t-重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。[fixed]\n\t+安全的Ajax设计。[fixed]\n\t\t-这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。\n\t\t-基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。\n\t\t-整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。\n\t-网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed]\n\t\n\t\n\t\n+2008-08-29 v1.1 beta1\n\t+Window控件是否弹出的状态在回发时维持。[fixed]\n\t\t-控件设计的一个原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。\n\t+完全抛弃\u003Cem\u003EAsp.Net\u003C\u002Fem\u003EAjax,ExtAspNet控件内置Ajax支持。[fixed]\n\t\t-这是一个值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和\u003Cem\u003EAsp.net\u003C\u002Fem\u003EAjax的回发),对于IFrame框架的交互也起到很好的加速效果。\n\t\t-不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。\n\t\t+在这种设计下,其实可以完全抛弃Javascript。\n\t\t\t-比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。\n\t\t\t-第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。\n\t\t\t-推荐的做法是尽量用客户端\u003Cem\u003E实现\u003C\u002Fem\u003E,客户端\u003Cem\u003E实现\u003C\u002Fem\u003E复杂的直接用服务器端\u003Cem\u003E实现\u003C\u002Fem\u003E。\n\t\t+目前ExtAspNetAjax的限制。\n\t\t\t-只对ExtAspNet控件起作用,对\u003Cem\u003EAsp.net\u003C\u002Fem\u003E控件不起作用。\n\t\t\t-对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。\n\t\t\t-对改变控件的Visible属性会有错误。\n\t\t\t-Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。\n\t-PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。[fixed]\n\t-Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed]\n\t-Grid选中行的状态在第一次回发时不能保持的BUG。[fixed]\n\t\n\t\n\t\n+2008-08-26 v1.0\n\t+已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。\n\t\t-主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。\n\t+优化弹出窗口中IFrame的显示速度。[fixed]\n\t\t-在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。\n\t-PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor=\"#CADDF7\",以便分隔符的颜色和Toolbar的颜色一致)[fixed]\n\t+PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed]\n\t\t-一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。\n\t-TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed]\n\t+TabStrip中非当前Tab会延迟渲染。[fixed]\n\t\t-这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染时间。\n\t\t-由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。\n\t-不能比较两个DataPicker大小的BUG。[fixed]\n\t-TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed]\n\t-全新的ExtAspNet.Examples(基础知识\u002F\u003Cem\u003E表单\u003C\u002Fem\u003E控件\u002F数据绑定\u002F容器布局\u002FIFrame框架)。[fixed]\n\t\n\t\n\t\n+2008-08-19 v0.4 beta6\n\t+PageManager增加两个属性(EnableInlineStyleJavascript\u002FApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe\u002Fdefault.aspx和iframe\u002Fpage3.aspx)。[fixed]\n\t\t-测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。\n\t-RadioButtonList放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed]\n\t+extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6\u002FIE7)(http:\u002F\u002Fwww.extjs.net\u002Fforum\u002Fshowthread.\u003Cem\u003Ephp\u003C\u002Fem\u003E?t=43246)(示例在test.aspx)[fixed]\n\t\t-现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true;\n\t+需要先回发页面再弹出IFrame窗口。[fixed]\n\t\t-在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。\n\t\t-另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference(\".\u002Fsimpleform.aspx\"));。\n\t\n\t\t\n\t\n+2008-08-15 v0.4 beta5\n\t-点击关闭窗口的按钮,在IE6下会有JS错误。[fixed]\n\t-增加BorderLayout控件,示例在iframe\u002Fborderlayout.aspx。[fixed]\n\t+Radiobuttonlist显示有重影(示例在radio.aspx)。[fixed]\n\t\t-全新的样式。\n\t\t-去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。\n\t\t-GetValueReference取得的值不正确的BUG。\n\t-动态向Form中添加FormRow,并动态的向FormRow中添加\u003Cem\u003E表单\u003C\u002Fem\u003E字段,以及如何取得\u003Cem\u003E表单\u003C\u002Fem\u003E字段的值。(示例在form_dynamic.aspx)[fixed]\n\t+IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed]\n\t\t-这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。\n\t\t-现在\"是否弹出窗口、窗口标题、IFrameUrl\"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx)\n\t\n\t\n\t\n+2008-08-13 v0.4 beta4\n\t-点击关闭窗口的按钮,在IE下会有JS错误。[fixed]\n\t-Window的右上角关闭图标增加提示,优化事件响应。[fixed]\t\n\t-Window的代码重构。[fixed]\t\n\t+修正一个的内存泄漏。[fixed]\n\t\t-IE7下测试,打开iframe\u002Fdefault.aspx页面,iexplorer占内存68.368M。\n\t\t-内存存在泄漏时,点击iframe\u002Fpage3.aspx页面8次后iexplorer占118.792M内存。\n\t\t-修正后,点击iframe\u002Fpage3.aspx页面8次后iexplorer占76.492M内存。\n\t\t-IE窗口最小化时,IE会自动进行垃圾回收。\n\t\n\t\n\t\n+2008-08-12 v0.4 beta3\n\t-底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed]\n\t-Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight=\"true\"解决)。[fixed]\n\t+页面正在加载的提示尽早的显示出来。[fixed]\n\t\t-首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。\n\t\t-加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。\n\t\n\t\n\t\n+2008-08-08 v0.4 beta2\n\t-TabStrip延时加载出错。[fixed]\n\t-Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为.\u002FFE_ApplyEditor.aspx或~\u002FPages_ExtAspNet\u002FFE_ApplyEditor.aspx。[fixed]\n\t-Window的WindowPosition=\"Center\"并且Target=\"_parent\",则会JS错误。[fixed]\n\t-\u003Cem\u003E实现\u003C\u002Fem\u003E网报首页下拉菜单和左侧菜单的导航功能。[fixed]\n\t-Window的创建在页面显示后进行,不计算在js渲染时间内。[fixed]\n\t-优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed]\n\t-button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。[fixed]\n\t-Window中的保存并关闭按钮和\u003Cem\u003EAsp.net\u003C\u002Fem\u003EAjax冲突。[fixed]\n\t-优化关闭Window的js脚本,减少写到页面的js大小。[fixed]\n\t-加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed]\n\t\n\t\n\t\n+2008-08-05 v0.4 beta1\n\t-DropDownList去除Traditional属性,和传统的\u003Cem\u003EAsp.net\u003C\u002Fem\u003E控件一样不可编辑。[fixed]\n\t-DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。[fixed]\n\t-为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed]\n\t-将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。[fixed]\n\t+弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed]\n\t\t-因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。\n\t\t-一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。\n\t\t-另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中\u003Cem\u003E表单\u003C\u002Fem\u003E内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx\u002Fsimpleform.aspx)。\n\t+PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed]\n\t\t-这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。\n\t-每个页面必须添加一个PageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。[fixed]\n\t-TextField等\u003Cem\u003E表单\u003C\u002Fem\u003E字段增加Readonly属性。[fixed]\n\t+全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和\u003Cem\u003EAsp.net\u003C\u002Fem\u003E Ajax保持兼容)。[fixed]\n\t\t-最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe文件夹下)\n\t\t+示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx\u002Fpage2.aspx\u002Fsimpleform.aspx)\n\t\t\t-虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加一个属性(Target=\"_parent\"),就完成了两种框架的转换,是不是很酷。\n\t\t\t-显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)\u002Fpage2.aspx(B)\u002Fsimpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。\n\t\t-示例2,Grid中弹出窗口。(default.aspx\u002Fpage3.aspx\u002Fsimpleform.aspx)\t\n\t\t+示例3,TriggerBox弹出窗口。(default.aspx\u002Ftriggerbox.aspx\u002Fsimpleform.aspx)\t\n\t\t\t-在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。\n\t\t-示例4,弹出窗口中的弹出窗口。\n\t-对整个Examples更新测试。[fixed]\n\t\n\t\n\t\n+2008-07-31 v0.3 beta12\n\t-IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed]\n\t-对TabStrip\u002FPanel\u002FWindow中的IFrame重新设计,如果设置IFrameUrl=\"#\"或者\"about:blank\",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。[fixed]\n\t-如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed]\n\t-Tree控件,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed]\n\t+规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx\u002Fsimpleform.aspx)。[fixed]\n\t\t-内部\u003Cem\u003E实现\u003C\u002Fem\u003E上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。\n\t-参照Yslow的评分规则,将JS文件引用由head移动到body中。[fixed]\n\t-Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed]\n\t+IFrame内的页面宽度和高度会自动设置(是不是还在为1px\u002F2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx\u002Fsimpleform.aspx\u002Fsimpleform2.aspx)[fixed]\n\t\t-增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE\u002FFirefox)。\n\t\n\t\n\t\n+2008-07-24 v0.3 beta11\n\t-web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局\u003Cem\u003E表单\u003C\u002Fem\u003E字段距离右边界的宽度,同时每个\u003Cem\u003E表单\u003C\u002Fem\u003E字段都增加OffsetRight属性 [feedback:jima]。[fixed]\n\t-Window在回发时设置的Title不起作用的BUG。[fixed]\n\t-增加Image控件 [feedback:jima]。[fixed]\n\t-Tree控件,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed]\n\t-Image增加ToolTipTitle\u002FToolTipAutoHide两个属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed]\n\t-去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed]\n\t-过滤提示消息中的换行符(转换为\u003Cbr\u002F\u003E),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed]\n\t\n\t\n\t\n+2008-07-23 v0.3 beta10\n\t+完善Tree控件。[fixed]\n\t\t-如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。\n\t\t-ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。\n\t\t-更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。\n\t-Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码![fixed]\n\t-Grid所有类型的列增加DataTooltipField\u002FDataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-22 v0.3 beta9\n\t+IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed]\n\t\t-发现原来ie6不能正确解析li的高度,必须手工设置才行(style=\"height:20px;\")。\n\t+IE6\u002FIE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed]\n\t\t-虽然最后未能解决\u003Cdiv style=\"width: 60px; white-space: nowrap; overflow: hidden; border: solid 1px red;\"\u003E\u003Cdiv style=\"width: 16px; height: 18px; float: left;\"\u003E##\u003C\u002Fdiv\u003E差旅交通费\u003C\u002Fdiv\u003E在IE和Firefox下显示的不同效果。\n\t\t-但是通过用\u003Cimg src=\"##\" \u002F\u003E来代替\u003Cdiv style=\"background:url(##)\" \u002F\u003E,从而\u003Cem\u003E实现\u003C\u002Fem\u003EFF和IE下样式的统一。\n\t\t-刚看到old9的解决方案:把“差旅交通费”改成“\u003Cspan style=\"margin-right: -1000px;\"\u003E差旅交通费\u003C\u002Fspan\u003E”,在IE下和FF下的都不换行,:-)\n\t-LinkButton增加OnClick事件 [feedback:huihuang]。[fixed]\n\t-Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed]\n\t+增加树控件(Tree)(示例在tree2.aspx)。[fixed]\n\t\t-可以在回发时维持树的状态(选中行,折叠\u002F展开,CheckBox)。\n\t\t-可以通过Inline的方式添加树节点,也可以绑定到XmlDocument\u002FXmlDataSource\u002FSiteMap。\n\t\t-点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。\n\t\n\t\n\t\n+2008-07-16 v0.3 beta8\n\t+ContentPanel中放置ExtAspNet控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed]\n\t\t-隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。\n\t\t 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。\n\t\t-现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局\u003Cem\u003E实现\u003C\u002Fem\u003E),只要超过Grid容器就会显示滚动条。\n\t+IE6下,在应用\u003Cem\u003EAsp.Net\u003C\u002Fem\u003EAjax后,Form中字段的宽度渲染不正确。[fixed]\n\t\t-调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。\n\t\t-最后发现IE6下应用\u003Cem\u003EAsp.Net\u003C\u002Fem\u003EAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG:\n\t\t 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有\u003Cem\u003E表单\u003C\u002Fem\u003E的宽度(box_fixFormWidthInIE6();):\n\t\t 示例在 Site.Master 页面。\n\t+集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了![fixed]\n\t\t-解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();),\n\t\t 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。\n\t\n\t\n\t\n+2008-07-14 v0.3 beta6\n\t-增加FlashObject控件。[fixed]\n\t-PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed]\n\t-Accordion选中样式微调。[fixed]\n\t-预加载Form\u003Cem\u003E表单\u003C\u002Fem\u003E出错时提示信息的背景图片。[fixed]\n\t+Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed]\n\t\t-因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置\"EnableDelayRender=false\"。\n\t-改变Grid中静态的CheckBoxField图片。[fixed]\n\t-TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击一个Tab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed]\n\t\n\t\n\t\n+2008-07-12 v0.3 beta5\n\t-页面菜单Toolbar的分割符和背景不相融合。[fixed]\n\t-\u003Cem\u003E表单\u003C\u002Fem\u003E字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed]\n\t\t-如果是同种类型的\u003Cem\u003E表单\u003C\u002Fem\u003E字段,不需要指定CompareType,比如两个NumberBox比较值的大小不需要指定CompareType,而一个NumberBox和TextBox比较大小需要指定CompareType。\n\t+如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx\u002Fajax_editor.aspx)。[fixed]\n\t\t-这是由于ajax后执行的javascript中不能有return false语句。\n\t+在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [feedback:xmzhu]。[fixed]\n\t\t-在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。\n\t-弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是\"#\"。[fixed]\n\t+弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed]\n\t\t-原来的调用方法太麻烦(见示例中alert\\alert_1.aspx和alert\\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。\n\t-点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed]\n\t+增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed]\n\t-增加SplitButton控件。[fixed]\n\t\n\t\n\t\n+2008-07-09 v0.3 beta4\n\t-DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed]\n\t+Form\u003Cem\u003E表单\u003C\u002Fem\u003E字段(TextBox,DropDownList...)之间可以比较大小 [feedback:huihuang]。[fixed]\n\t\t-增加ControlToCompare\u002FValueToCompare\u002FCompareOperator\u002FCompareMessage四个属性,示例在form_compare.aspx。\n\t+TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed]\n\t\t-特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。\n\t-RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed]\n\t-FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed]\n\t+\u003Cem\u003E表单\u003C\u002Fem\u003E字段Enable=false时显示颜色太浅 [feedback:jima]。[fixed]\n\t\t-覆盖缺省样式的.x-item-disabled,设置不透明。\n\t\n\t\n\t\n+2008-07-08 v0.3 beta3\n\t-Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed]\n\t+增加HiddenField控件。[fixed]\n\t\t-其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle=\"display:none;\"即可。\n\t+TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。[fixed]\n\t\t-最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。\n\t-模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed]\n\t+控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。[fixed]\n\t\t-增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。\n\t-LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-07 v0.3 beta2\n\t+增加UpdatePanelConnector控件,支持在布局构建的页面使用\u003Cem\u003EAsp.net\u003C\u002Fem\u003E Ajax。[fixed]\n\t\t-使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。\n\t\t-示例在ajax3.aspx\u002Fcontent_page4.aspx。\n\t\t-示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。\n\t \n\t \n\t\n+2008-07-03 v0.3 beta1\n\t+容器控件的AutoHeight\u002FAutoWidth默认为false。[fixed]\n\t\t-使用GroupPanel的地方需要手工添加AutoHeight=\"true\"属性。\n\t+增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。[fixed]\n\t\t-也可以在ContentPanel中放置用户控件,注意两者的区别。\n\t+增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed]\n\t+支持\u003Cem\u003EAsp.net\u003C\u002Fem\u003E ajax异步加载。[fixed]\n\t\t-有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx\u002Fcontent_ajax2.aspx中。\n\t\t-对于使用布局构建的页面(比如content_page1.aspx)还不能使用\u003Cem\u003EAsp.net\u003C\u002Fem\u003E ajax,因为页面是整体渲染的,先放弃。\n\t\n\t\n\t\n+2008-07-02 v0.2 beta12\n\t+关闭前提示当前页面已经被修改(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-支持Iframe内按钮和window右上角关闭按钮。\n\t\t-删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。\n\t+iframe中的alert\u002Fconfirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed]\n\t\t-在Firefox下还有问题。[fix pending]\n\t+排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed]\n\t\t-可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。\n\t\t-可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。\n\t+HyperLinkField\u002FWindowField的链接地址支持服务器端格式(即是~\u002Falert.aspx)。[fixed]\n\t-TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed]\n\t-可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。[fixed]\n\t\t\n\t\n\t\n+2008-06-30 v0.2 beta11\n\t-增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。[fixed]\n\t-Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录时总记录数不会变化 [feedback:zgjiang2]。[fixed]\n\t-关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed]\n\t-如果\u003Cem\u003E表单\u003C\u002Fem\u003E验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。[fixed]\n\t+页面中任意可输入\u003Cem\u003E表单\u003C\u002Fem\u003E字段发生变化,可提示先保存。(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-目前还不支持Window右上角关闭按钮的提示保存功能。\n\t-Master\u002FContent的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed]\n\t-Grid中的LinkButtonField设置ConfirmText会出错 [feedback:huihuang]。[fixed]\n\t-增加静态类Confirm。[fixed]\n\t\n\t\n\t\n+2008-06-27 v0.2 beta10\n\t+Grid完善。[fixed]\n\t\t-CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。\n\t\t-Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。\n\t\t-切换分页时清空选中的值 [feedback:jqpeng]。\n\t\t-增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。\n\t-DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。\n\t\n\t\n\t\n+2008-06-25 v0.2 beta9\n\t+Window窗体中的Iframe只让内容区域滚动,而Toolbar不滚动的规则。(示例在content_page2.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-在simpleform.aspx中:Panel[BodyPadding=5](Toolbar,Panel[Height=450 Layout=Fit](SimpleForm[AutoScroll=true])),则外面窗口的高度=450 + 5*2 + 26 + 32,其中26是Toolbar的高度,32是窗口的标题栏和下边框的高度。\n\t+关闭Iframe的LoadMask,所以需要Iframe页面添加PageLoading控件,这样效果统一。[fixed]\n\t+Grid完善。\n\t\t-去除EnableClientPaging和EnableClientSort属性,客户端排序和客户端分页在\u003Cem\u003EASP.NET\u003C\u002Fem\u003E应用中会有很多问题(主要是状态保持的问题)。\n\t\t+EnableServerSort改名AllowSorting。(示例在grid_sorting.aspx)\n\t\t\t-使用非常简单:设置AllowSorting=true,注册OnSort事件,在事件处理函数中重新绑定数据。\n\t\t+增加AllowPaging属性。(示例在grid_paging.aspx)\n\t\t\t-使用非常简单:设置AllowPaging=true,PageSize=3,注册OnPageIndexChange事件,在事件处理函数中Grid1.PageIndex = e.NewPageIndex;OK。\n\t\t+数据库分页支持。(示例在grid_database_paging.aspx)\n\t\t\t-使用也非常简单:设置AllowPaging=true,PageSize=3,在绑定时设置RecordCount为总的记录数,在OnPageIndexChange事件处理函数中Grid1.PageIn","createTime":"2010-04-01 09:41:27","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2190657-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2190657-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"4\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fsuper_zhaowenke\u002F2190657\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2190657-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713862001382_29045\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"4\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fsuper_zhaowenke\u002F2190657\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-4-2190657-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713862001382_29045\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"},{"url":"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fwode2600\u002F2726130","title":"ExtAspNet_v2.3.2_dll","desc":"ExtAspNet - ExtJS based \u003Cem\u003EASP.NET\u003C\u002Fem\u003E Controls with Full AJAX Support\n\t\nExtAspNet是一组专业的\u003Cem\u003EAsp.net\u003C\u002Fem\u003E控件库,拥有原生的AJAX支持和丰富的UI效果,\n目标是创建没有ViewState,没有JavaScript,没有CSS,没有UpdatePanel,没有WebServices的Web应用程序。\n\n支持的浏览器: IE 7.0+, Firefox 3.0+, Chrome 2.0+, Opera 9.5+, Safari 3.0+\n\n注:ExtAspNet基于一些开源的程序ExtJS, HtmlAgilityPack, Nii.JSON, YUICompressor。\n\n示例: http:\u002F\u002Fext\u003Cem\u003Easp.net\u003C\u002Fem\u003E\u002F\n开源: http:\u002F\u002Fextaspnet.codeplex.com\u002F\n博客: http:\u002F\u002Fsanshi.cnblogs.com\u002F\n邮箱: sanshi.ustc@gmail.com\n\n\n发布历史:\n\n+2010-09-29 v2.3.2\n\t-不绑定任何数据到Grid时,确保页面不会出错。\n\t-修正了Grid列属性DataFormatString的一个bug,比如设置{0:yy-MM-dd HH:mm}时没有效果。\n\t-修正下拉列表控件不能绑定DataTable的BUG(feedback:RedOcean)。\n\t-增加土耳其语言资料文件(feedback:abdullaharslan)。\n\t-Grid的BoundField增加NullDisplayText属性,用于处理数据库中的null值,如果没有设置则默认为空字符串。\n\t-修正DatePicker中的一个bug(31\u002F01\u002F2010将会返回NULL)使用DateFormatString来生成SelectedDate属性(feedback:OktaEndy)。\n\t-修正extjs最新版本(v3.2.2)中的一个bug,如果下拉列表中存在两个相同的Text,则SelectedValue返回值永远是第一个Text的值(feedback:ben.zhou)。\n\t-应用补丁#6593, #6621(feedback:vbelyaev)。\n\t+修正IE7下Grid分页速度慢(feedback:youwei, StevenGuan, hazardvn, gavindou, ttjacky)。\n\t\t-实际上IE7下所以的回发都慢,原因是客户端的Base64编码速度慢,已经使用encodeURIComponent来代替Base64编码。\n\t-俄语翻译(feedback:vbelyaev)。\n\t\n\t\n\n+2010-06-30 v2.3.1\n\t-ExtAspNet控件将不在依赖ViewState,减少1\u002F4左右的HTTP数据传输量。\n\t-控件和示例的增强。\n\t\n\t\n\n+2010-03-28 v2.2.1\n\t+为TabStrip的GetAddTabReference函数增加重载方法,以便指定Tab的图标(feedback:mmdcup)。 \n\t\t-修正此函数通过PageContext.RegisterStartupScript调用时不能正确显示Icon的BUG(feedback:zhaowenke)。\n\t-修正basic\u002Fhello.aspx示例在单独浏览器打开后,不能弹出对话框的BUG。\n\t-隐藏示例首页最外层RegionPanel的边框ShowBorder=\"false\"。\n\t+集成Extjs最新版本v3.1.1。\n\t\t-增加一个新的Theme - Access。\n\t\t-修正了Firefox下Zoom In\u002FOut时页面消失的BUG。\n\t\t-删除Panel的EnableLightBackgroundColor属性,同时EnableBackgroundColor只支持Blue和Gray两种Theme。\n\n\n\n+2010-01-31 v2.2.0\n\t-使得\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的控件ImageButton具有和\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的Button控件类似的行为(Ajax提交)(feedback:261629698)。\n\t+TabStrip增加GetAddTabReference和GetRemoveTabReference两个函数,用来向TabStrip控件动态增加删除Tab。\n\t\t-增加示例tabstrip\u002Ftabstrip_addtab.aspx。\n\t-重构了示例网站的架构,目前只有一层IFrame结构。\n\t-为TabStrip增加EnableTabCloseMenu属性,是否启用右键菜单,可用来关闭当前Tab和所有其他Tab。\n\t-为NumberBox增加DecimalPrecision属性,用来控制小数点后的位数(需要设置NoDecimal=\"false\")(feedback:zqmars)。\n\t-Window控件更新。\n\t\t-关闭按钮默认直接关闭,不会弹出确认对话框。\n\t\t-GetConfirmFormModifiedHideReference的函数中的ConfirmFormModified简化为Confirm,所以此函数更名为GetConfirmHideReference。\n\t\t-增加两个属性EnableConfirmOnClose(默认false),CloseAction(Hide, HideRefresh, HidePostBack)。\n\t\t-修正EnableMaximize属性不能使Window最大化的BUG,修正了双击标题栏不能最大化的BUG。\n\t-删除Button控件的SystemIcon属性,比如以前这样定义SystemIcon=\"Close\",现在需要这样定义Icon=\"SystemClose\"。\n\t-WindowPosition默认居中,而不是黄金分割位置。\n\t+Button, Window等控件弹出位置属性的变化。\n\t\t-Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target=\"_self\" -\u003E Target=\"Self\", Target=\"_parent\" -\u003E Target=\"Parent\"。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField的ConfirmTarget属性由字符串变为枚举类型,可以取三个枚举值Self, Parent, Top。\n\t\t-Confirm.GetShowReference的最后一个参数target变为枚举类型。\n\t\t-Alert.GetShowReference中的showInParent参数也变为Target枚举类型。\n\t\t-MenuButton, LinkButton, Button, LinkButtonField增加ValidateTarget用来控制\u003Cem\u003E表单\u003C\u002Fem\u003E验证失败时提示对话框的显示位置。\n\n\n\n+2010-01-06 v2.1.9\n\t-集成Extjs最新版本v3.1.0。\n\t-修正灰色皮肤的CSS问题。\n\t-修正Grid的列名中不能包含中文字符的BUG(feedback:davidwen)。\n\t-为Web.config和PageManager增加属性AjaxTimeout(单位秒,默认30秒)。\n\t-修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。\n\t-Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle=\"float:left;\"属性。\n\t-修正了弹出菜单的位置在Firefox下不正确的BUG(feedback:eroach)。\n\t-为TriggerBox和TwinTriggerBox增加EnableEdit属性。\n\t-使用Hidden来显示隐藏ExtAspNet控件,而不是使用Visible属性(Visible目前设置为只读属性)。\n\t-使用Hidden控制Window控件的显示隐藏,Popup已经标记为Obsolete属性。\n\t-Window的实例方法GetCloseReference等以及ActiveWindow的静态方法GetCloseReference等,其中的Close全部改为Hide。\n\t-增加TabStrip中Tab控件可关闭属性EnableClose(默认为false)以及两个方法GetShowReference和GetHideReference(feedback:anson)。\n\t-修正绑定到Tree的XMLDocument中Icon属性映射错误(feedback:nopnop9)。\n\t-修正HtmlEditor不能编辑的BUG(feedback:TheBox)。\n\t-修正IE下有时会出现空白页面的情况(feedback:olivia919)。\n\t\n\t\n\n+2009-12-06 v2.1.8\n\t-修正了使用IFrame的Window关闭后不能再次打开的BUG(feedback:alexa99)。\n\t-修正了IE下Grid中的一个JS问题(feedback:lqm4108)。\n\t-修正Alert消息中引号未编码导致的JS错误(feedback:sun1299shine)。\n\t+集成extjs3.0.3。\n\t\t-修正弹出对话框的宽度计算错误(会保持最小的状态)。\n\t\t-增加新的皮肤Gray。\n\t-为示例工程添加改变语言和皮肤的下拉列表。\n\t-为PageContext增加静态函数Refresh,在切换语言和皮肤时使用。\t\n\n\n\n+2009-12-01 v2.1.7\n\t-增加示例(iframe\u002Fparent_postback_run3.aspx),如何通过简单的Javascript代码回发父页面(feedback:eroach)。\n\t-修正一些书写错误(feedback:bmck)。\n\t-从Region控件中删除SplitColor属性,增加CollapseMode, EnableSplitTip, SplitTip, CollapsibleSplitTip属性(feedback:bmck)。\n\t-BorderPanel更名为RegionPanel。\n\t-DropDownList拥有MarkInvalid方法(feedback:sun1299shine)。\n\t-增加中国的省市县三级联动示例(data\u002Fshengshixian.aspx)(feedback:Blues T)。\n\t-修正了使用IFrameUrl的Tab在切换过程中会重复加载的问题,这是一个在v2.1.6引入的问题(feedback:eroach)。\n\t-修正了启用AutoPostBack的Grid,其RowClick会覆盖LinkButtonField, HyperLinkField, CheckBoxField的点击事件(feedback:yymaoji)。\n\t\n\t\n\t\n+2009-11-26 v2.1.6\n\t+修正动态创建Grid列的BUG(feedback:gxpan)。\n\t\t-增加示例(data\u002Fgrid_dynamic_columns.aspx)。\n\t-修正Form不能自适应浏览器大小的改变(feedback:kaywood)(WorkItem#6309)。\n\t-增加重载方法Alert.Show(message, title, icon)(feedback:TheBox)(WorkItem#6353)。\n\t-为容器控件(比如Panel,Region,Tab等)增加AJAX属性IFrameUrl(feedback:BluesT)。\n\t-重新设计模拟树的下拉列表的\u003Cem\u003E实现\u003C\u002Fem\u003E,避免选中某项后的闪烁。\n\t\t\t\n\n\n+2009-11-21 v2.1.5\n\t+Tree优化。\n\t\t-修正Expanded项和Checked项的状态在回发改变后不能保持的BUG。\n\t\t-GetNodeById更名为FindNode,保持和FindControl一致命名。\n\t\t-删除CheckedNodeIDArray属性,增加GetCheckedNodes和GetCheckedNodeIDs函数。\n\t\t-删除ExpandedNodeIDArray属性,增加GetExpandedNodes和GetExpandedNodeIDs函数。\n\t\t-增加示例(data\u002Ftree_select_run.aspx),如何选中当前节点的所有子节点(feedback:wjl_wjl520)。\n\t\t+TreeNode的属性NodeId被重命名为NodeID,这是ExtAspNet中的一个命名约定。\n\t\t\t-同时更名的还有GridColumn的ColumnId-\u003EColumnID,GetColumnId-\u003EGetColumnID。\n\t\t\t-Grid1.Columns.FindColumnById函数被Grid1.FindColumn所替代。\n\t\t-为TreeCheckEventArgs,TreeExpandEventArgs,TreeCommandEventArgs增加Node属性。\n\t-为所有控件增加Focus(覆盖Control默认的Focus函数)和GetFocusReference函数。\n\t-增加示例(other\u002Fcustom_postback.aspx)(feedback:thebox)。\n\t\t-如何自定义Javascript脚本和C#处理函数来响应键盘事件。\n\t-为Tree增加AutoLeafIdentification属性。\n\t\t-增加示例(tree_auto_leaf_identification.aspx)(feedback:wdrabbit)。\n\t\n\t\n\n+2009-11-17 v2.1.4\n\t-修正Window的关闭按钮提示信息一直是中文的BUG(feedback:thebox)。\n\t-部分ExtAspNet控件的设计时支持(会在后续版本中逐步完善)。\n\t-v0.2beta2版本中关于PersistChildren(true)的描述有误,这个是设计时属性,和运行时是否保持状态没有关系。\n\t-修正CheckBox控件的CheckedChanged事件会被触发两次的BUG(Data PostBack-\u003EAutoPostBack, Event PostBack-\u003EEnablePostBack)。\n\t-为TextBox,TextArea,DatePicker,NumberBox,TriggerBox等控件增加AutoPostBack属性(feedback:dk3214)。\n\t+为\u003Cem\u003E表单\u003C\u002Fem\u003E字段增加RequiredMessage,MaxLengthMessage,MinLengthMessage属性,用于指定验证失败时提示信息。\n\t\t-为空则使用默认的提示信息,默认的提示信息支持多语言,建议一般情况下使用默认信息。\n\t+为\u003Cem\u003E表单\u003C\u002Fem\u003E字段增加MarkInvalid和GetMarkInvalidReference函数(feedback:sun1299shine)。\n\t\t-增加示例:form\u002Fform_validate.aspx\n\t\n\t\n\n+2009-10-19 v2.1.3\n\t+增加支持在AJAX时改变的控件属性列表(\u002Fajax.aspx)。\n\t\t-ExtAspNet支持原生的AJAX,也就是说控件的属性改变在AJAX过程中会反映到页面中,但并不是所有的控件属性都支持AJAX改变。\n\t-加载s.gif图片在本机进行,不会请求extjs.com远程资源(feedback:efrigate43,abaocoole)。\n\t-在AJAX回发后确保\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的按钮控件仍然具有AJAX的特性。\n\t-更新\u002Fbasic\u002Flogin.aspx示例,使用验证图片(feedback:kedee)。\n\t-为Grid增加AutoPostBack属性和RowClick事件,示例在\u002Fdata\u002Fgrid_autopostback.aspx(feedback:chenguizhu2006)。\n\t-为所有的\u003Cem\u003E表单\u003C\u002Fem\u003E字段增加AJAX属性ReadOnly(feedback:skydb)。\n\t-Grid中TemplateField生成到页面中控件具有唯一ID,例如Grid1_ct5_Label2,Grid1_ct6_Label2(feedback:geruger)。\n\t\n\t\n\n+2009-09-27 v2.1.2\n\t-为Tree控件增加GetExpandAllNodesReference和GetCollapseAllNodesReference两个函数。\n\t-修正RELEASE版本下多语言加载的BUG(feedback:yigehaoren)。\n\t-增加pt_BR语言,由Ujvari提供。\n\t+为所有Panel(包括Grid,Tree,Form等)增加枚举类型Icon,其中包含1700多个小图标。\n\t\t-如果Panel具有IconUrl属性,则IconUrl优先于Icon。\n\t\t-所有Icon的列表在icon.aspx。\n\t-为Button,MenuItem(MenuButton,MenuHyperLink),AccordionLink,TreeNode,Image(如果ImageUrl为空,则取Icon的值)增加Icon属性。\n\t\n\t\n\n+2009-09-15 v2.1.1\n\t-修正不能动态修改AccordionPane属性Items的BUG。\n\t+为Button, MenuButton, LinkButton, LinkButtonField增加ConfirmTarget。\n\t\t-如果需要在父页面弹出确认对话框,需要设置ConfirmTarget=\"_parent\"(类似Window控件的Target=\"_parent\")。\n\t+为ExtAspNet.Alert.Show增加点击确定的JavaScript回调函数。\n\t\t-一个典型应用,在Window控件中打开新页面,如果传递的参数不正确,则首先提示参数不对然后关闭此弹出窗口。\n\t\t-ExtAspNet.Alert.Show(\"参数错误!\", String.Empty, ExtAspNet.ActiveWindow.GetCloseReference());\n\t+TreeNode的前面的多选框可以自动回发了。\n\t\t-为TreeNode增加AutoPostBack属性,增加事件数据类TreeCheckEventArgs,为Tree增加事件NodeCheck。\n\t\t-示例在:http:\u002F\u002Fext\u003Cem\u003Easp.net\u003C\u002Fem\u003E\u002Fdata\u002Ftree_run.aspx\n\t-Grid增加GetNoSelectionAlertInParentReference函数,用来表示没有选中任何一项时在父页面弹出对话框的JS代码。\n\t-修正IE7下不能以下划线作为CSS中类名的前缀的BUG(feedback:Steve.Wei)。\n\t-添加定时器控件Timer,用来定时发起AJAX请求。\n\t\n\t\n\n+2009-09-06 v2.1.0\n\t-Button的Pressed属性值能够正确的反映客户端的变化。\n\t-优化Tree控件的AJAX\u003Cem\u003E实现\u003C\u002Fem\u003E。\n\t+为页面的Form添加autocomplete=\"off\"属性。\n\t\t-参考http:\u002F\u002Fwww.cnblogs.com\u002Fsanshi\u002Farchive\u002F2009\u002F09\u002F04\u002F1560146.html#1635830\n\t+添加对extjs3.0中所有语言的支持。\n\t\t-ExtAspNet扩展的多语言包在js\\languages\\extaspnet目录下,目前只有en,zh_CN,zh_TW三种\u003Cem\u003E实现\u003C\u002Fem\u003E\n\t\t-你可以向其中添加自己的语言版本,并执行js\\languages下的pack.bat打包,最后编译工程。\n\t\n\t\n\t\n+2009-09-01 v2.0.9\n\t-为ExtAspNet.Alert添加两个静态方法ShowInParent和GetShowInParentReference,用于在父页面弹出窗口。\n\t+在aspx页面中必须显示的声明控件的集合属性(比如Tabs(TabStrip), Items(PanelBase), Nodes(TreeNode))。\n\t\t-这将会影响所有的aspx页面,所以要特别关注。\n\t-重命名AccordionPanel为AccordionPane (这也是在\u003Cem\u003EAsp.net\u003C\u002Fem\u003E AJAX中使用的名称).\n\t+所有的面板默认有两个集合属性(Toolbars和Items).\n\t\t-尽管TabStrip, From, Tree, Accordion继承了Items属性,但是你并不能对其设置(此时Items是只读的).\n\t\t-这将会影响所有的aspx页面,一定要将工具条(Toolbars)和Items区分开来。\n\t-祝你生日快乐 - 小师妹妹。\n\n\n\n+2009-08-29 v2.0.8\n\t-ExtAspNet支持多语言(en,zh_CN,zh_TW),可以在Web.config中修改。\n\t-将所有的示例转化为英语版本。\n\t-修正Tree控件的一个BUG(定义Mappings属性时)。\n\t+PageManager.Instance应该存在于HttpContext.Current,而不是一个全局变量。\n\t -这个BUG导致\u003Cem\u003EAsp.net\u003C\u002Fem\u003E compatibility中的示例无法完成,现在已经修正。\n\t+去除PageManager中方法AddAjaxAspnetControls,增加属性AjaxAspnetControls。\n\t -这个属性和Button得ValidateForms属性类似,可以查看\u003Cem\u003EAsp.net\u003C\u002Fem\u003E compatibility中的示例。\n\t\n\t\n\n+2009-08-25 v2.0.7\n -为按钮增加DisableControlBeforePostBack属性 - 回发之前是否禁用按钮,防止重复提交 - 默认为true。\n -Grid的Values属性访问限制由internal改为public,这就意味这可以自由改变Grid中每个单元格的值了。\n -增加示例-如何将Grid控件导出为Excel(data\\grid_excel_run.aspx)(feedback:503684912)。\n -如果TreeNode的属性Enabled=\"false\",则此项变灰并且不会被选中(feedback:your568)。\n -修正TreeNode的属性NavigateUrl不接受服务器端URL(以~\u002F开头)的BUG。\n -增加Accordion和Tree配合使用的示例(other\\accordion_tree_run.aspx)。\n -修正Panel图标不能显示的BUG(CSS中class名不能有$字符)。\n +去除PageLayout控件,此控件可以使用BorderLayout和指定PageManager的AutoSizePanelID属性来代替。\n\t\t-这样所有需要占据全屏的Panel(不管你是Accordion,Panel,ContentPanel,Form,GroupPanel,SimpleForm,Tree还是Grid,TabStrip)都可以通过这种方式全屏。\n\t\t-简单方便,示例可以参考 default.aspx 或者 other\\accordion_tree_run.aspx。\n \n \n\n+2009-08-14 v2.0.6\n\t-动态生成菜单实例(other\\menu_dynamic_run.aspx和other\\menu_dynamic2_run.aspx)(feedback:shguo)。\n\t-优化AJAX的内部\u003Cem\u003E实现\u003C\u002Fem\u003E,每个页面保存的ViewState现在减少1\u002F3左右(重要更新)。\n\t-优化Tree节点的NodeId自动生成,减少ViewState占用。\n\t\n\n\n+2009-08-09 v2.0 beta5\n\t+ExtAspNet和\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的提交按钮兼容问题(feedback:千帆)。\n\t\t-在2009-03-03 v1.3.0曾经提到这个兼容问题,并有这样的规则,如果\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的按钮AJAX提交,必须设置UseSubmitBehavior=\"false\"\n\t\t--也就是说生成的input的type不能是\"submit\",而这个限制在有些情况下是不可原谅的。\n\t\t--我们做了优化,现在要使一个\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的按钮能够AJAX提交,你不需要做任何设置(PageManager的属性EnableAjax为true即可,这是默认属性)。\n\t+PageManager的实例方法AddAjaxUpdateControl改名为AddAjaxAspnetControls,现在可以在Page_Load中设置需要在AJAX中需要更新的\u003Cem\u003EAsp.net\u003C\u002Fem\u003E控件了。\n\t\t-在Page_Load中设置了哪些需要在AJAX中更新的\u003Cem\u003EAsp.net\u003C\u002Fem\u003E控件会在回发时保持状态,可以通过RemoveAjaxAspnetControls来去除不需要更新的控件。\n\t\t-示例在aspnet\\fckeditor_run.aspx和aspnet\\aspnet_run.aspx。\n\t\t-FCKEditor和上传控件兼容。示例在aspnet\\fileupload_run.aspx。\n\t-修正ToolbarText的文本在AJAX下更新的BUG。\n\t-Button的Pressed属性在AJAX可更新(feedback:mgzhenhong)。\n\t-更新所有示例。在IE7.0,IE8.0,Firefox3.5,Chrome2.0下测试通过。\n\t\n\n\n+2009-08-02 v2.0 beta4\n\t+和\u003Cem\u003EAsp.Net\u003C\u002Fem\u003E的Forms Authentication兼容[feedback:mgzhenhong]。\n\t\t-采用和\u003Cem\u003EAsp.Net\u003C\u002Fem\u003E Ajax类似的处理方式,需要在配置文件Web.config增加一个httpModules。\n\t\t-现在支持Response.Redirect,你可以选择Response.Redirect或者ExtAspNet.PageContext.Redirect重定向页面,两者效果一样。\n\t\t-支持FormsAuthentication.RedirectFromLoginPage(accountID, false);这样的方法。\n\t-Button增加Type属性(button,reset,submit)[feedback:mgzhenhong]。\n\t-修正Alert.Show方法不能指定文本前图片的BUG[feedback:xmq&mgzhenhong]。\n\t-修正IE下某些弹出窗口的IFrame第一次不能加载的BUG。\n\t-增加Menu和Accordion的示例。\n\t-修正Window控件的IconUrl有时不显示(Target=\"_parent\")的BUG[feedback:xmq&mgzhenhong]。\n\t\n\n\n+2009-07-22 v2.0 beta3\n\t-兼容FCKEditor。\n\t-在IE8.0,Firefox3.5下测试通过。以后ExtAspNet将不会对IE6.0提供支持。\n\t\n\n\n+2009-07-13 v2.0 beta2\n\t-集成extjs最新版本v3.0。\n\t+兼容IE6.0-7.0-8.0。\n\t\t-这应该是Extjs3.0的一个BUG,在IE6.0-7.0下面设置Ext.QuickTips.init();会导致button的click事件无法响应(IE8下无此问题)。\n\t\t-目前先禁用IE6.0-7.0的QuickTips。\n\t-优化底层JavaScript。\n\t\n\t\n\t\n+2009-07-05 v2.0 beta1\n\t-更新extjs库到最新版本v3.0 RC2; 目前只有一个缺省皮肤(Theme)。\n\t-使用YUI Compressor压缩JavaScript和CSS文件。\n\t-Release版本每个页面只包含一个JavaScript文件(语言文件除外)和一个CSS文件。\n\t-ExtAspNet自身的CSS会紧挨着页面标签引入,这样在中自定义的样式可以覆盖ExtAspNet缺省样式。\n\t+Alert对话框会遮挡所有的Window窗口。\n\t\t-使用一个变通的方法解决,因为无法改变Ext.Message的默认z-index(9000)所以将box.window_default_group的zseed调整为6000。\t\n\t-为所有按钮的左右增加5px的空白边距:.x-btn button { margin: 0 5px !important; }。\n\t-因为下拉列表不可编辑,所以不能为空,如果不设置SelectedIndex或SelectedValue,则默认选中第一项。\n\t-重新绑定模拟树的下拉列表后,选中项的前面有图片的HTML标签的BUG。\n\t-更新自定义JavaScript组件Ext.ux.SimplePagingToolbar。\n\t-更新示例工程。\n\t\n\t\n\n+2009-03-25 v1.3.1\n\t-Tree在AJAX回发展开节点时JS错误[feedback:xlli]。[fixed]\n\t-Window中的EnableIFrame==false,则点击关闭按钮时报JS错误。[fixed]\n\t-页面包含FileUpload控件,需要点击按钮回发并上传文件,则不能采用原生AJAX方式。(参见示例aspnet\u002Ffileupload.aspx)[fixed]\n\t-HtmlEditor显示隐藏工具栏按钮不起作用,HtmlEditor目前不支持Enabled和Readonly两个属性。[fixed]\n\t\n\t\n\n+2009-03-03 v1.3.0\n\t-如果弹出的窗口(Ext-Window)含有\u003Cem\u003EASP.NET\u003C\u002Fem\u003E控件FileUpload,则此弹出窗口在关闭时出现JS错误(http:\u002F\u002Fextjs.com\u002Fforum\u002Fshowthread.\u003Cem\u003Ephp\u003C\u002Fem\u003E?t=8129)[feedback:xlli]。[fixed]\n\t-如果页面中存在\u003Cem\u003EASP.NET\u003C\u002Fem\u003E控件(TextBox),则第二次提交\u003Cem\u003E表单\u003C\u002Fem\u003E就会报错(视图状态不对,其实时没有更新EventValidation隐藏字段导致的问题)。[fixed]\n\t-页面上放置ExtAspNet-Button和\u003Cem\u003EASP.NET\u003C\u002Fem\u003E-Button,则点击ExtAspNet-Button时激发的是\u003Cem\u003EASP.NET\u003C\u002Fem\u003E-Button的事件,这个BUG和Extjs2.2.1中Ext.Ajax.serializeForm的\u003Cem\u003E实现\u003C\u002Fem\u003E有关。[fixed]\n\t-ExtAspNet内部包含HtmlAgilityPack和Nii.JSON两个开源的第三方类库。[added]\n\t+如果以前你听过不要在ExtAspNet工程中使用\u003Cem\u003EASP.NET\u003C\u002Fem\u003E标准控件的忠告,那么从v1.3.0版本开始,你可以忘掉这个说法,现在ExtAspNet控件和\u003Cem\u003EASP.NET\u003C\u002Fem\u003E标准控件和平共处了。[fixed]\n\t\t-如果一个\u003Cem\u003EASP.NET\u003C\u002Fem\u003E按钮控件要使用ExtAspNet的原生AJAX,只需要设置属性 UseSubmitBehavior=\"false\" 即可。\n\t\t-如果要在一次ExtAspNet的原生AJAX回发时更新\u003Cem\u003EASP.NET\u003C\u002Fem\u003E控件的值,只需要调用PageManager的公共方法AddAjaxUpdateControl即可(示例:aspnet\u002Faspnet.aspx)。\n\n\n\n+2009-02-27 v1.2 beta9\n\t-网络连接出错时的“Ajax Error”改成更加友好的提示信息“本次连接失败!可能是网络连接出错,请刷新页面重试。”。[fixed]\n\t-自动测试功能会在以后版本中逐步完善。这个版本完成测试框架,采用Extjs中JS函数进行大部分的测试,对于一些难以测试的地方借助jQuery完成。[fixed]\n\t+系统底层代码优化(主要是Javascript的封装和BUG修复)。[fixed]\n\t\t-底层使用Javascript创建一个Window控件的代码由原来的2000字符减少为500个字符。\t\n\t\t-PageContext静态类中的GetPageStateChangedFunction改名为GetConfirmFormModifiedReference,底层代码优化。表示“获取当前页面中\u003Cem\u003E表单\u003C\u002Fem\u003E修改的确认提示框的脚本”。\n\t\t---[updated]删除PageContext中的GetConfirmFormModifiedReference,使用CurrentActiveWindow中的GetConfirmFormModifiedCloseReference\u002FGetConfirmFormModifiedCloseRefreshReference\u002FGetConfirmFormModifiedClosePostBackReference三个方法代替。\n\t\t-不会修改弹出页面的URL(Ext-Window中的IFrame),以前为了\u003Cem\u003E实现\u003C\u002Fem\u003E功能为每个弹出页面添加box_parent_client_id查询字符串\n\t\t-去除PageManager的RegisterPageStateChangedScript属性,现在已经将这个功能\u003Cem\u003E实现\u003C\u002Fem\u003E为静态的JS方法。可以通过PageContext.GetFormModifiedConfirmReference获取此方法的客户端脚本。\n\t\t---注意:以前的项目需要在所有的ASPX页面中查找RegisterPageStateChangedScript属性,并删除,否则会运行错误!\n\t\t-A页面有Ext-Window控件弹出B页面,B页面有Ext-Window控件弹出C页面,B页面的Ext-Window控件设置Target='_parent',则弹出的Ext-Window(C页面)会覆盖整个A页面,这是正确的。\n\t\t---当时如果用户直接访问B页面,就会报JS错误,因为此时找不到B页面的父页面A了。现在的版本修正为如果找不到父页面,则就在当前页面弹出窗口,这样用户直接访问B页面也不会出错了。\n\t\t-Window控件的GetIFramePageStateChangedFunction函数改名为GetConfirmFormModifiedCloseReference,表示“获取先确认IFrame的页面中\u003Cem\u003E表单\u003C\u002Fem\u003E改变,然后关闭弹出窗口的客户端脚本”。\n\t\t---为Window控件增加如下两个方法GetConfirmFormModifiedCloseRefreshReference和GetConfirmFormModifiedClosePostBackReference,表示“先确认\u003Cem\u003E表单\u003C\u002Fem\u003E改变,然后关闭弹出Ext-Window,再然后刷新父页面或回发父页面”。\n\t\t---Window控件的OnClientCloseButtonClick属性如果不设置,则默认采用GetConfirmFormModifiedCloseReference,也即是先判断\u003Cem\u003E表单\u003C\u002Fem\u003E是否更新,然后在关闭窗口。\n\t\t---现在可以很方便的为Window控件的关闭按钮添加关闭后刷新父页面或者关闭后回发父页面的行为。\n\t\t-如果弹出窗口(Window控件)中IFrame的页面不能正常加载(网络暂时出错或页面抛出异常),则此时点击右上角的关闭按钮会报JS错误,因为此时页面尚未加载完毕。\n\t\t---此版本修正了这个BUG,即时页面不能加载完全,也能通过右上角的关闭按钮关闭弹出含IFrame的窗体。\n\t\t-Window控件的IFrameName属性是自动生成的,只读属性。(因为有可能所有的Ext-Window最终都渲染到最外层的页面,为了保证这些IFrame的name不同,IFrameName使用的是GUID,内部处理)。\n\t\t-CurrentActiveWindow改名为ActiveWindow。\n\t\t-[特别注意]GetWriteBackValueReference(string controlClientIds, string value, params string[] values)函数现在的定义是GetWriteBackValueReference(params string[] values)\n\t\t---所有调用GetWriteBackValueReference的地方,需要删除第一个参数(一般是ActiveWindow.GetLoadStateReference())。\n\t\t\n\t\n\n+2009-02-23 v1.2 beta8\n\t-ContentPanel中内容不能自动扩展高度的BUG[feedback:huihuang]。[fixed]\n\t-DropDownList在Ajax回发时不能计算模拟树的数据[feedback:huihuang]。[fixed]\n\t-DropDownList在页面第一次加载时没有不可选择项,则回发时也不会有不可选择项的BUG。[fixed]\n\t-升级底层ExtJS类库为v2.2.1(此版本主要是Chrome的支持和部分内存泄漏问题的修正)。[fixed]\n\t-页面加载过程中的时间信息保存在Javascript变量window.box.timeInfo中。[added]\n\t+增加部分自动测试支持(使用WatiN和NUnit),下个版本将会提供完整的自动测试支持。[fixed]\n\t\n\t\n\n+2008-10-28 v1.2 beta7\n\t-DropDownList没有选中任何一项,回发时报错[feedback:huihuang]。[fixed]\n\t-Window显示位置不对,以及不能拖动的BUG[feedback:huihuang]。[fixed]\n\t+PageContext优化。[fixed]\n\t\t-去除RegisterExclusiveScript静态函数(这是没有原生ajax之前的产物),使用RegisterStartupScript替代。\n\t\t-去除RegisterStartupScript的重载函数,只保留最简单的PageContext.RegisterStartupScript(string script)函数。\n\t\t-Resirect增加重载函数Redirect(string url, string target),其中target可能的取值为_self,_parent,_top,分别表示在当前窗口,父窗口,顶级窗口重定向[feedback:jqpeng]。\n\t-Image控件增加ImageWidth\u002FImageHeight\u002FImageCssStyle\u002FImageCssClass\u002FImageAlt属性[feedback:jqpeng]。[fixed]\n\t-发布包中增加一个Web.config.txt,这是一个空的Web.config文件,包含BOX基本的配置信息。[fixed]\n\t-ContentPanel的ShowHeader和ShowBorder属性默认也是true(注意更新以前的应用)。[fixed]\n\t-Row和Column布局时,修正IE下设置RowHeight=\"100%\"时显示不正确的BUG。[fixed]\n\t-AccordionLink当鼠标移上和移开时,有背景色的变化效果[feedback:huihuang]。[fixed]\n\t+TabStrip的Tab控件的EnablePostBack属性会在回发时保持(也即是说如果EnablePostBack=true,回发时没改变EnablePostBack的值,则每次切换到此Tab都会回发)。[fixed]\n\t\t-有这样一个效果,如果Tab1默认显示,Tab1的EnablePostBack=true,则页面加载完毕后会回发Tab1一次。\n\t\n\t\n\n+2008-10-20 v1.2 beta6\n\t+使用控件的站点必须建立虚拟目录,否则会报JS错误(即是脚本资源没有加载),却原来是HTTPCompress组件的问题。[fixed]\n\t\t-需要替换新的blowery.Web.HttpCompress.dll,解决方案见http:\u002F\u002Fpohee.com\u002Fit\u002Fhttp-compression-in-aspnet-20\u002F。\n\t+DropDownList优化。[fixed]\n\t\t-去除EnableFirstItem\u002FFirstItemText\u002FFirstItemValue,这个并不能带来很大的好处,反而容易让开发人员困惑。\n\t\t 现在可以方便的在后台DropDownList1.Items.Insert(0, new ExtAspNet.ListItem(\"全部\", \"-1\"));来达到同样的效果。\n\t\t+如果某项(ListItem)的Value为空字符串,则通过SelectedIndex和SelectedValue不能选中[feedback:jqpeng]。\n\t\t\t-和\u003Cem\u003EAsp.net\u003C\u002Fem\u003E中的保持一致,ListItem的Value值可以为空字符串。 也就是可以这样写DropDownList1.SelectedValue = \"\";\n\t\t-ListItemCollection增加重载函数Add(string text, string value),这样方便后台添加列表项。\n\t-处于布局内的容器控件(Layout!=LayoutType.Container),AutoHeight会自动设置为false(避免开发人员发生此类错误)。[fixed]\n\t-注意,控件的高度指的是整个控件的高度,包含BodyPadding(这和CSS中的height不同,CSS中的height是指内容的高度,除去padding\u002Fborder-width\u002Fmargin)。[fixed]\n\t+为所有控件属性增加在VS中的智能提示。[fixed]\n\t\t-需要将ExtAspNet.XML和ExtAspNet.dll放在一起,这样引用dll时xml会被拷贝到bin目录下,提供VS的智能提示。\n\t+控件的属性如果是枚举类型,如果此属性可以不取值,则默认为None。[fixed]\n\t\t-TriggerIconType.Default -\u003E TriggerIconType.None\n\t\t-SystemIconType.Empty -\u003E SystemIconType.None\n\t\t-RegexPattern.USER_DEFINED -\u003E RegexPattern.None\n\t-\u003Cem\u003E表单\u003C\u002Fem\u003E验证属性名称变化(ValueToCompare-\u003ECompareValue,ControlToCompare-\u003ECompareControl)。[fixed]\n\t+注意:一个属性可以拥有多个值的情况。[fixed]\n\t\t-属性和CSS相关则用空格分隔(比如ColumnWidths,BodyPadding)。\n\t\t-其他的都是逗号分隔(比如ValidateForms,DataKeyNames,DataNavigateUrlFields)。\n\t+AccordionLink\u003Cem\u003E实现\u003C\u002Fem\u003E为控件。[fixed]\n\t\t-可以方便的在子页面(iframe)中通过js切换父页面中选中的菜单项(Accordion-\u003EAccordionLink)(示例在other\u002Faccordion_links_run.aspx,other\u002Faccordion_links_run_iframe_htm)[feedback:jima]。\n\t+确认:可以方便的动态添加控件,并且可以给控件添加服务器端事件(示例在form\u002Fform_dynamic_run.aspx)。[fixed]\n\t\n\t\n\t\n+2008-10-15 v1.2 beta5\n\t-验证\u003Cem\u003E表单\u003C\u002Fem\u003E字段的ValueToCompare属性,为字符串时会出错的BUG。[fixed]\n\t+优化下拉列表。[fixed]\n\t\t-验证下拉列表时,应该取ListItem的Value属性进行验证,而不是Text属性。\n\t\t-DropDownList的Items增加Insert方法(可方便的下拉列表选项添加“全部”)。\n\t\t-DropDownList不支持EmptyText属性。\n\t\t-ListItem启用EnableSelect和SimulateTreeLevel属性,这样就可以直接在前台(ASPX)中设置哪些项不可选择,以及创建模拟下拉树。\n\t\t-DropDownList增加EnableSimulateTree属性(默认为false),如果设置了DataSimulateTreeLevelField,则自动将EnableSimulateTree设置为true。\n\t\n\t\n\n+2008-09-27 v1.2 beta4\n\t+EnableLargeHeader属性对所有容器的效果一样,Accordion的属性EnableLargeHeader只会改变Accordion的标题大小,而不会对AccordionPanel起作用(示例见other\u002Faccordion_run.aspx)。[fixed]\n\t\t-Accordion去除EnableHightlight属性,AccordionPanel增加EnableHightlight属性。\n\t\t-影响以前使用Box的应用,需要将Accordion的属性去掉,然后为每个AccordionPanel增加EnableLargeHeader和EnableHightlight属性。\n\t-AccordionPanel鼠标移上去的样式调整(现在没有下面的一条白线了)。[fixed]\n\t+AccordionPanel增加Links属性,可以绑定列表数据到AccordionPanel,呈现的是链接的列表(示例在other\u002Faccordion_links_run.aspx)。[fixed]\n\t\t-原来放置在AccordionPanel中的容器,比如ContentPanel需要在外层加上标签。\n\t\t-适当增大AccordionPanel中链接的高度20px-\u003E22px,同时对链接的样式也做了微调。\n\t\t-通过BodyPadding控制链接列表的边距。\n\t\t-这样能大大减少ASPX中HTML代码和Javascript代码的书写,可以在后台动态添加链接,效果很赞,此需求由马季提出。\n\t\n\t\n\t\n+2008-09-25 v1.2 beta3\n\t+代码优化与设计时支持(尚需要不断完善,目前可以在ASPX页切换到“设计时”,方便属性的更改和事件处理函数的添加)。[fixed]\n\t\t-Panel\u002FGroupPanel\u002FContentPanel\u002FTree\u002FHiddenField\u002FPageLoading\n\t\t-TabStrip\u002FToolbar\n\t-TabStrip去除Plain属性,增加EnableTitleBackgroundColor(默认为true)。[fixed]\n\t-向Form中动态添加控件的BUG,现在form\u002Fform_dynamic_run.aspx示例已经能正确运行。[fixed]\n\t+大部分容器的子控件集合更正为Items(以前有些是Rows)。[fixed]\n\t\t-影响的控件包括Toolbar\u002FAccordion\u002FAccordionPanel\u002FGroupPanel\u002FPanel\u002FSimpleForm\u002FWindow等。\n\t\t-保留Form的Rows(FormRowCollection)属性和Grid的Rows属性(GridRowCollection)。\n\t\t-保留TabStrip的Tabs(TabCollection)属性。\n\t\t-保留PageLayout\u002FBorderLayout的Regions(RegionCollection)属性。\n\t-预祝今晚神七发射成功。\n\t\n\t\n\t\n+2008-09-22 v1.2 beta2\n\t+Grid选中项(SelectedRowIndexArray)在ajax回发过程中存在BUG [feedback:xmzhu]。[fixed]\n\t\t-表现为对Grid进行多次删除添加操作后,SelectedRowIndexArray选中项中会存在当前不存在的行序号,导致服务器端遍历选中项时\u003Cem\u003E数组\u003C\u002Fem\u003E越界。所有使用box控件的应用程序都受到此BUG的影响,需尽快更新到新版本。\n\t+代码优化与设计时支持(示例中\u003Cem\u003E表单\u003C\u002Fem\u003E控件都已支持设计)。[fixed]\n\t\t-PageManager\u002FSimpleForm\u002FButton\u002FHyperLink\u002FLabel\u002FImage\u002FLinkButton\u002FTextBox\n\t\t-TriggerBox\u002FTwinTriggerBox\u002FWindow\u002FTextArea\u002FHtmlEditor\u002FDatePicker\u002FNumberBox\n\t\t-CheckBox\u002FRadioButton\u002FRadioButtonList\u002FDropDownList\n\t\t-Grid\n\n\n\n+2008-09-19 v1.2 beta1\n\t-Image\u002FLinkButton\u002FHyperLink增加一些Ajax可更新属性。[fixed]\n\t+隐藏的方式由HideMode属性控制Visibility\u002FOffsets\u002FDisplay。[fixed]\n\t\t-修正Form\u002FSimpleForm中隐藏一个\u003Cem\u003E表单\u003C\u002Fem\u003E字段(Hidden=false)会占据页面空间的BUG。\n\t-ToolbarText\u002FToolbarFill\u002FToolbarSeparator在ASPX中设置Hidden=true不起作用的BUG [feedback:jbzhang]。[fixed]\n\t-Button去除MarginRight属性(可以通过CssStyle=\"margin-right:5px;\"达到相同的效果)[fixed]\n\t\n\t\n\t\n+2008-09-09 v1.1\n\t+Toolbar去除IsPageMenu属性,在网报中可以用自定义样式\u003Cem\u003E实现\u003C\u002Fem\u003E,而不应该写在控件中。[fixed]\n\t\t-网报:CssClass=\"toolbar-pagemenu\" CssStyle=\"border:0px;\",同时定义样式:.toolbar-pagemenu{ background: rgb(208, 222, 240) url(..\u002Fimages\u002Fpagemenu_toolbar_background.gif) repeat-x left top;}。\n\t-Region去除默认的Layout=Fit,如果希望Region使用Fit\u002FAnchor\u002FColumn\u002FRow等布局的话,需要手工指定。[fixed]\n\t-ToolbarSeparator\u002FToolbarFill在Ajax更新Hidden属性的BUG。[fixed]\n\t+布局整理。[fixed]\n\t\t-新增Column\u002FAbsolute\u002FRow三种布局,加上以前的Container\u002FFit\u002FAnchor\u002FAccordion\u002FBorder\u002FForm六种布局,总共有9中布局可供使用。\n\t\t-其中一些控件默认使用一种布局:SimpleForm(Form)\u002FForm(Form)\u002FPanel-GroupPanel(Container)\u002FAccordion(Accordion)\u002FPageLayout(Border)\u002FBorderLayout(Border)\u002FTabStrip(Card),所有布局控件默认的布局是Container。\n\t\t-经常用到的布局控件:SimpleForm\u002FForm\u002FAccordion\u002FTabStrip\u002FBorderLayout,经常用到的布局:Fit\u002FRow\u002FAnchor\n\t\n\t\n\t\n+2008-09-08 v1.1 beta7\n\t-MenuButton\u002FMenuHyperLink增加HideOnClick属性,如果一个菜单项的作用仅仅为了弹出下级菜单,点击没反应,则可以这样设置HideOnClick=\"false\" CssStyle=\"cursor:default;\" [feedback:huayu]。[fixed]\n\t-MenuButton\u002FMenuHyperLink\u002FMenuSeparator\u002FMenuText增加Hidden属性(此属性是Ajax可更新属性,如果需要在Ajax时显示隐藏菜单,请使用此属性而不是Visible属性)。[fixed]\n\t+大部分的ExtAspNet控件增加Hidden属性(少数几个控件没有此属性:Menu),这样在Ajax时可以显示隐藏控件。[fixed]\n\t\t-注意Visible和Hidden的区别:Visible=false的属性不会渲染到客户端,Hidden=true的控件渲染到客户端但是隐藏。\n\t\t-US的ExtAspNet改造强烈依赖于此属性,这个版本发布后可以继续。\n\t\t-网报中唯一没有用到ExtAspNetAjax的地方就是显示隐藏\u003Cem\u003E表单\u003C\u002Fem\u003E字段,现在也可以使用Ajax了。\n\n\n\n+2008-09-04 v1.1 beta6\n\t-PageContext.Redirect支持普通页面转向和ExtAspNetAjax下页面转向。[fixed]\n\t+模拟树的下拉列表的BUG(会使一些可选项变成不可选项)[feedback:xmzhu]。[fixed]\n\t\t-因为if(\"0,2,9,11,\".indexOf('1,')\u003E=0){ok},这显然是不对的,此BUG涉及很多控件(Grid,DropDownList,TabStrip)。\n\t\t-解决方法:testValue += '';if(domValue.split(',').indexOf(testValue) \u003E= 0){ok}。\n\t-DropDownList在Ajax时应该先更新数据再设置选定项 [feedback:xmzhu]。[fixed]\n\t-Button\u002FMenuButton增加Ajax可更新属性OnClientClick [feedback:xmzhu]。[fixed]\n\t-Tree的Ajax支持(尚需优化)。[fixed]\n\t\n\t\n\n+2008-09-02 v1.1 beta5\n\t-DropDownList如果第一次没有绑定值,应该绑定到[[]](二维\u003Cem\u003E数组\u003C\u002Fem\u003E),而不是[](一维\u003Cem\u003E数组\u003C\u002Fem\u003E)。[fixed]\n\t-模拟树的DropDownList,在Ajax重新绑定DataSource后,保持项是否可选状态是最新的(页面第一次加载时,即使没有数据也需要设置DataTextField\u002FDataValueField\u002FDataSimulateTreeLevelField\u002FDataEnableSelectField等属性的值,否则Ajax回发时会出错)。[fixed]\n\t-UserControlConnector导致的Ajax错误,去除UpdatePanelConnector控件(以后不会用AspnetAjax,这个控件已经完成使命)。[fixed]\n\t-不要使用\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的控件HiddenField,而是使用ExtAspNet的HiddenField,因为\u003Cem\u003EAsp.net\u003C\u002Fem\u003E的控件在Ajax不会被更新,所以会导致视图状态不一致的错误。[fixed]\n\t-网报Ajax整合基本完成(除了待审批-\u003E下一步[审核\u002F归档\u002F出纳]操作,由于需要显示隐藏\u003Cem\u003E表单\u003C\u002Fem\u003E字段,目前Ajax不支持,使用的还是普通的PostBack)。[fixed]\n\t-IE下,RadioButtonList中项如果存在汉字,则会换行的BUG。[fixed]\n\t-增加两个Theme[Slate\u002FBlack](样式尚需完善)。[fixed]\n\t\n\t\n\t\n+2008-09-01 v1.1 beta4\n\t-非当前Tab中如果有ContentPanel,则在页面上方会有空白(可以通过设置EnableDeferredRender=false解决,但会减慢页面的加载速度),现在已经解决这个问题。[fixed]\n\t-RadioButtonList去除EnableBackgroundColor\u002FEnableLightBackgroundColor属性,背景色是透明的,也就是和父控件(SimpleForm\u002FForm)的背景色一致。[fixed]\n\t-TwinTriggerBox的第一个Trigger图标不会先显示再隐藏,而是直接隐藏掉(如果用户设置ShowTrigger1=false)。[fixed]\n\t-Web.config中增加配置项FormLabelWidth=\"80\"(默认为80),同时PageManager增加FormLabelWidth属性用来控制页面上所有SimpleForm\u002FForm的\u003Cem\u003E表单\u003C\u002Fem\u003E字段标题的宽度。[fixed]\n\t+完善Ajax。[fixed]\n\t\t-RadioButtonList增加Ajax可更新属性SelectedIndex(SelectedValue\u002FSelectedItem)。\n\t\t-DropDownList增加Ajax可更新属性Enable\u002FSelectedIndex(SelectedValue\u002FSelectedItem)\u002FDataSource。\n\t\t-Grid增加Ajax可更新属性Columns(也就是说Grid列在回发时隐藏显示了一些,也能正确的Ajax)。\n\t\t-ToolbarText增加Ajax可更新属性Text。\n\t\t\n\t\t\n\t\t\n+2008-08-31 v1.1 beta3\n\t-TabStrip增加EnableDeferredRender属性(是否启用延迟加载Tab,默认启用)。[fixed]\n\t-重定向页面,使用系统的方法 PageContext.Redirect(string url),使用Response.Redirect方法会出错。[fixed]\n\t+安全的Ajax设计。[fixed]\n\t\t-这个版本Ajax和上个版本(v1.1beta1)在设计思路上有很大区别,同时在速度上会有进一步的提升。\n\t\t-基本思想:安全的Ajax交互,明确Ajax回发时支持控件哪些属性的改变,这将适合90%的应用场景(并且具有极快的反应速度),对于需要UI大改动的可采用常规回发,系统提供控件级别的EnableAjax属性。\n\t\t-整理支持Ajax的控件属性改变列表(所有被支持的属性改变都是安全的、快速的,所有不被支持的属性改变不会对UI起作用,同时是安全的,不会有js错误)。\n\t-网报Ajax整合(目前只支持所有的列表页面)(v0.8.1)。[fixed]\n\t\n\t\n\t\n+2008-08-29 v1.1 beta1\n\t+Window控件是否弹出的状态在回发时维持。[fixed]\n\t\t-控件设计的一个原则,凡是可以在客户端改变的属性都应该在回发时保持属性的状态。\n\t+完全抛弃\u003Cem\u003EAsp.Net\u003C\u002Fem\u003EAjax,ExtAspNet控件内置Ajax支持。[fixed]\n\t\t-这是一个值得骄傲的设计,可以明显提高页面回发的速度(相比普通的回发和\u003Cem\u003EAsp.net\u003C\u002Fem\u003EAjax的回发),对于IFrame框架的交互也起到很好的加速效果。\n\t\t-不需要做任何配置,所有的回发都是Ajax(在Web.config和PageManager中有设置启用Ajax回发的属性-EnableAjax-默认为true)。\n\t\t+在这种设计下,其实可以完全抛弃Javascript。\n\t\t\t-比如简单的点击一个按钮弹出窗口,可以在Button的OnClick事件中设置Window1.Popup=true,也可以注册Button的OnClientClick=Window1.GetShowReference()。\n\t\t\t-第一种方法需要回发,但是我们内置的Ajax支持能很快的返回需要的结果并解析,在网络速度很快的情况下和第二种方法差别不是很大。\n\t\t\t-推荐的做法是尽量用客户端\u003Cem\u003E实现\u003C\u002Fem\u003E,客户端\u003Cem\u003E实现\u003C\u002Fem\u003E复杂的直接用服务器端\u003Cem\u003E实现\u003C\u002Fem\u003E。\n\t\t+目前ExtAspNetAjax的限制。\n\t\t\t-只对ExtAspNet控件起作用,对\u003Cem\u003EAsp.net\u003C\u002Fem\u003E控件不起作用。\n\t\t\t-对容器控件(有子控件的控件)不起作用,只对最底层的控件起作用。\n\t\t\t-对改变控件的Visible属性会有错误。\n\t\t\t-Window控件的属性改变只有少数几个起作用(Popup,IFrameUrl)。\n\t-PageManager增加属性EnablePageLoading和EnableAjaxLoading(启用页面第一次加载标示和Ajax加载标示,默认都为true),所以如果使用系统默认的加载标示就不必每个页面都添加PageLoading控件。[fixed]\n\t-Grid中的回发事件(主要是LinkButtonField和CheckBoxField(RenderAsStaticField=false))要延迟0ms执行,这样当前行被选中的状态在回发后会得到保持。[fixed]\n\t-Grid选中行的状态在第一次回发时不能保持的BUG。[fixed]\n\t\n\t\n\t\n+2008-08-26 v1.0\n\t+已知问题:IE的ActiveX插件IE Developer Toolbar会对IFrame的加载造成0.5m左右的延迟。\n\t\t-主要是父页面加载一个比较大的css文件(~100k),则每次打开iframe页面,onload事件的调用都会有500ms左右的延迟,在测试IE性能时要禁用此插件。\n\t+优化弹出窗口中IFrame的显示速度。[fixed]\n\t\t-在当前页面弹出窗口需要~20ms,在父页面弹出窗口需要100~300ms。通过缓存弹出的窗口实例,从而第二次弹出窗口不再需要创建时间。\n\t-PageLayout的Region增加SplitColor属性,默认的背景色是透明的。(在网报中需要设置SplitColor=\"#CADDF7\",以便分隔符的颜色和Toolbar的颜色一致)[fixed]\n\t+PageManager增加属性Theme、Language、FormMessageTarget、FormOffsetRight等属性,这些属性可以在Web.config中设置(推荐方法),也可以为每个页面设置。[fixed]\n\t\t-一个典型的应用是为每个用户设置不同的皮肤(根据用户浏览器中Cookie设置的值)(示例在default.aspx)。\n\t-TreeNode增加属性SingleClickExpand,表示点击可切换节点的折叠展开状态。[fixed]\n\t+TabStrip中非当前Tab会延迟渲染。[fixed]\n\t\t-这会明显加快页面的渲染速度,网报中一个典型的费用审批页面可以减少200ms的渲染时间。\n\t\t-由于非当前Tab不会在页面加载时渲染,所以那些Tab中的节点在页面加载后也是不可见的,需要将相关的脚本移动到控件的render事件中。\n\t-不能比较两个DataPicker大小的BUG。[fixed]\n\t-TabStrip延迟加载引起的BUG(非当前Tab中的ContentPanel会占据页面空间,已修正)。[fixed]\n\t-全新的ExtAspNet.Examples(基础知识\u002F\u003Cem\u003E表单\u003C\u002Fem\u003E控件\u002F数据绑定\u002F容器布局\u002FIFrame框架)。[fixed]\n\t\n\t\n\t\n+2008-08-19 v0.4 beta6\n\t+PageManager增加两个属性(EnableInlineStyleJavascript\u002FApplyParentStyleJavascript),可以在IFrame页面中使用父页面的脚本和样式(示例在iframe\u002Fdefault.aspx和iframe\u002Fpage3.aspx)。[fixed]\n\t\t-测试发现,IFrame页面的加载速度并没有明显加快,可以先不使用此属性。\n\t-RadioButtonList放在在BorderLayout中显示不了的BUG [feedback:zgjiang2]。[fixed]\n\t+extjs的BUG,当页面中含有iframe时,Ext.onReady会被调用两次(IE6\u002FIE7)(http:\u002F\u002Fwww.extjs.net\u002Fforum\u002Fshowthread.\u003Cem\u003Ephp\u003C\u002Fem\u003E?t=43246)(示例在test.aspx)[fixed]\n\t\t-现在的解决方法是在初始化时:if(this.initialized){return;}this.initialized=true;\n\t+需要先回发页面再弹出IFrame窗口。[fixed]\n\t\t-在回发时设置窗口的Popup和IFrameUrl属性,因为这些属性是可以保持状态的,所以在关闭窗口时要注意设置Popup=false。\n\t\t-另一种做法(推荐):PageContext.RegisterStartupScript(Window99.GetShowReference(\".\u002Fsimpleform.aspx\"));。\n\t\n\t\t\n\t\n+2008-08-15 v0.4 beta5\n\t-点击关闭窗口的按钮,在IE6下会有JS错误。[fixed]\n\t-增加BorderLayout控件,示例在iframe\u002Fborderlayout.aspx。[fixed]\n\t+Radiobuttonlist显示有重影(示例在radio.aspx)。[fixed]\n\t\t-全新的样式。\n\t\t-去除Horizontal属性,增加ColumnNumber(可以设置渲染成几列)。\n\t\t-GetValueReference取得的值不正确的BUG。\n\t-动态向Form中添加FormRow,并动态的向FormRow中添加\u003Cem\u003E表单\u003C\u002Fem\u003E字段,以及如何取得\u003Cem\u003E表单\u003C\u002Fem\u003E字段的值。(示例在form_dynamic.aspx)[fixed]\n\t+IFrame弹出窗口关闭后回发父页面,则会多加载IFrame一次,再次打开窗口会重复加载IFrame2-3次[feedback:xmzhu]。[fixed]\n\t\t-这是一个重要的BUG,会严重影响页面的加载速度。原因是通过脚本改变的IFrameUrl会在回发时保持状态,从而回发父页面后Window中的IFrame被添加到页面,而这是不需要的。\n\t\t-现在\"是否弹出窗口、窗口标题、IFrameUrl\"在客户端的改变,不会影响服务器端的属性,也即是不保持状态。此问题解决。(示例在button_iframe.aspx)\n\t\n\t\n\t\n+2008-08-13 v0.4 beta4\n\t-点击关闭窗口的按钮,在IE下会有JS错误。[fixed]\n\t-Window的右上角关闭图标增加提示,优化事件响应。[fixed]\t\n\t-Window的代码重构。[fixed]\t\n\t+修正一个的内存泄漏。[fixed]\n\t\t-IE7下测试,打开iframe\u002Fdefault.aspx页面,iexplorer占内存68.368M。\n\t\t-内存存在泄漏时,点击iframe\u002Fpage3.aspx页面8次后iexplorer占118.792M内存。\n\t\t-修正后,点击iframe\u002Fpage3.aspx页面8次后iexplorer占76.492M内存。\n\t\t-IE窗口最小化时,IE会自动进行垃圾回收。\n\t\n\t\n\t\n+2008-08-12 v0.4 beta3\n\t-底层的javascript框架Extjs升级为v2.2,Grid的渲染速度有很大提升。[fixed]\n\t-Grid的EnableDelayRender默认为true(如果没有设置Grid的高度或通过布局间接设置高度,则行不可见,可以通过AutoHeight=\"true\"解决)。[fixed]\n\t+页面正在加载的提示尽早的显示出来。[fixed]\n\t\t-首先在执行js来完成页面渲染之前延迟5ms,以便浏览器把当前页面内容显示出来。\n\t\t-加载js脚本的script标签放置在页面的最后,放置加载js而阻塞PageLoading的显示。\n\t\n\t\n\t\n+2008-08-08 v0.4 beta2\n\t-TabStrip延时加载出错。[fixed]\n\t-Window的IFrameUrl处理的BUG,比如Pages_ExtAspNet目录下的页面应该为.\u002FFE_ApplyEditor.aspx或~\u002FPages_ExtAspNet\u002FFE_ApplyEditor.aspx。[fixed]\n\t-Window的WindowPosition=\"Center\"并且Target=\"_parent\",则会JS错误。[fixed]\n\t-\u003Cem\u003E实现\u003C\u002Fem\u003E网报首页下拉菜单和左侧菜单的导航功能。[fixed]\n\t-Window的创建在页面显示后进行,不计算在js渲染时间内。[fixed]\n\t-优化费用申请页面(尽量减少不必要的层次嵌套)。[fixed]\n\t-button_iframe.aspx默认会加载form.aspx页面(Window控件的BUG)。[fixed]\n\t-Window中的保存并关闭按钮和\u003Cem\u003EAsp.net\u003C\u002Fem\u003EAjax冲突。[fixed]\n\t-优化关闭Window的js脚本,减少写到页面的js大小。[fixed]\n\t-加快“保存并关闭”按钮关闭窗口的速度,使用PageContext.RegisterExclusiveScript(CurrentActiveWindow.GetClosePostBackReference());,示例在(simpleform.aspx)。[fixed]\n\t\n\t\n\t\n+2008-08-05 v0.4 beta1\n\t-DropDownList去除Traditional属性,和传统的\u003Cem\u003EAsp.net\u003C\u002Fem\u003E控件一样不可编辑。[fixed]\n\t-DropDownList增加SelectedText属性(去除了模拟树时通过SelectedItem.Text的多余html字符)。[fixed]\n\t-为了加快渲染速度,去掉一些特效(比如Panel的折叠效果,Grid的拖动列效果等)[feedback:dcding]。[fixed]\n\t-将生成的js对象的名称简单化,这样可以减少生成的js内容,加快页面加载速度(一个典型页面的js由原来的33.0k降低为21.4k)。[fixed]\n\t+弹出窗口中,点击按钮回发然后点击关闭按钮,出现js错误 [feedback:xmzhu]。[fixed]\n\t\t-因为在页面的Page_Load中,if (!IsPostBack){PageContext.RegisterPageStateChangedStartupScript();}通过这样方法向页面注册了一段脚本,但是这段脚本在回发时没有注册到页面,因为js调用此脚本时报错。\n\t\t-一种解决方法是将向页面注册脚本的函数移动到if语句的外面,即每次都向页面注册此脚本。\n\t\t-另一种办法就是在PageManager控件中增加RegisterPageStateChangedScript(向页面注册监视页面中\u003Cem\u003E表单\u003C\u002Fem\u003E内容改变的脚本)的属性(会在每次页面回发(包含ajax回发)时注册脚本)(示例在button_iframe.aspx\u002Fsimpleform.aspx)。\n\t+PageManager控件增加ExecuteOnReadyWhenPostBack属性(示例在onreadyscript.aspx)。[fixed]\n\t\t-这个手工添加onReady函数能够在每次页面回发时都注册脚本(包括Ajax局部回发),这就避免了手工去做的麻烦(已经在网报中遇到这种情况)。\n\t-每个页面必须添加一个PageManager控件,否则会出错,同时去除DesignTimeStyle控件(作为PageManager的属性出现)。[fixed]\n\t-TextField等\u003Cem\u003E表单\u003C\u002Fem\u003E字段增加Readonly属性。[fixed]\n\t+全新设计的IFrame的架构(尽可能和基于MasterPage的架构保持兼容,和\u003Cem\u003EAsp.net\u003C\u002Fem\u003E Ajax保持兼容)。[fixed]\n\t\t-最大的好处是可以减少页面下载完毕后Javascript渲染时间(可以节约一般的渲染时间)。(所有示例在iframe文件夹下)\n\t\t+示例1,通过点击按钮弹出IFrame窗口,可直接关闭父页面,也可在关闭后刷新或回发父页面。(default.aspx\u002Fpage2.aspx\u002Fsimpleform.aspx)\n\t\t\t-虽然IFrame和Master两种架构差异迥然,或许你以为需要修改一堆代码来完成这种转换,起初我也是这么认为的,但是现在你所要做的仅仅是为Window控件增加一个属性(Target=\"_parent\"),就完成了两种框架的转换,是不是很酷。\n\t\t\t-显然,控件本身封装了大量的代码,简单来看现在有三个页面(default.aspx(A)\u002Fpage2.aspx(B)\u002Fsimpleform.aspx(C)),其中A包含B页面,当你在B中打开包含有页面C的窗口时,窗口不是在B中打开,而是在A中打开,这样才能保证窗口覆盖整个页面,当你从C中返回需要回发页面B时,却发现取得的是A页面,因为我们窗口是在A页面中创建的。我会通过一篇文章来揭示这一过程,敬请期待。\n\t\t-示例2,Grid中弹出窗口。(default.aspx\u002Fpage3.aspx\u002Fsimpleform.aspx)\t\n\t\t+示例3,TriggerBox弹出窗口。(default.aspx\u002Ftriggerbox.aspx\u002Fsimpleform.aspx)\t\n\t\t\t-在整个页面弹出窗口或者在当前页面弹出窗口,仅仅设置Window的Target属性即可。\n\t\t-示例4,弹出窗口中的弹出窗口。\n\t-对整个Examples更新测试。[fixed]\n\t\n\t\n\t\n+2008-07-31 v0.3 beta12\n\t-IE下TabStrip在Ajax回发后不会去掉x-hide-display样式,导致Tab显示为空的BUG。[fixed]\n\t-对TabStrip\u002FPanel\u002FWindow中的IFrame重新设计,如果设置IFrameUrl=\"#\"或者\"about:blank\",则不渲染iframe到页面节点,同时第二次打开Window中的IFrame不会有残影出现。[fixed]\n\t-如果TabStrip的Tab不是激活Tab并且设置了IFrameUrl,则会延迟加载(示例在tabstrip_iframe.aspx)。[fixed]\n\t-Tree控件,点击一个节点自动回发,则当前点击的那个节点的选中状态不会保持的BUG [feedback:zgjiang2]。[fixed]\n\t+规范关闭窗口时提示用户保存已经修改的内容提示的调用方式(包含iframe中关闭按钮和window右上角关闭图标的调用方式)(示例在grid_iframe.aspx\u002Fsimpleform.aspx)。[fixed]\n\t\t-内部\u003Cem\u003E实现\u003C\u002Fem\u003E上,点击“保存并关闭按钮”,可以将关闭窗口的脚本更早的执行(在simpleform.aspx,PageContext.RegisterStartupScript增加重载函数),而不是原来的先创建整个页面UI,再关闭窗口。\n\t-参照Yslow的评分规则,将JS文件引用由head移动到body中。[fixed]\n\t-Firefox下,如果页面太长会出滚动条,原来在ViewPort样式中有body{overflow:hidden;}。[fixed]\n\t+IFrame内的页面宽度和高度会自动设置(是不是还在为1px\u002F2px的白边而烦恼,现在不用了:-)(示例在iframe_autosize.aspx\u002Fsimpleform.aspx\u002Fsimpleform2.aspx)[fixed]\n\t\t-增加PageManager控件(需要指定AutoSizePanelID,即需要设置宽度和高度为整个页面的宽度和高度的Panel),HideScrollbar属性用于隐藏滚动条(IE\u002FFirefox)。\n\t\n\t\n\t\n+2008-07-24 v0.3 beta11\n\t-web.config配置信息中MessageTarget改名为FormMessageTarget,增加FormOffsetRight配置项,用来定义全局\u003Cem\u003E表单\u003C\u002Fem\u003E字段距离右边界的宽度,同时每个\u003Cem\u003E表单\u003C\u002Fem\u003E字段都增加OffsetRight属性 [feedback:jima]。[fixed]\n\t-Window在回发时设置的Title不起作用的BUG。[fixed]\n\t-增加Image控件 [feedback:jima]。[fixed]\n\t-Tree控件,如果一个节点不是叶子节点并且没有子节点,则应把它的Expanded设置为false,否则会引起页面死循环回发 [feedback:zgjiang2]。[fixed]\n\t-Image增加ToolTipTitle\u002FToolTipAutoHide两个属性,当提示信息特别长时,可以让用户阅读完毕之后手工关闭提示信息(示例在hyperlink.aspx)。[fixed]\n\t-去掉DropDownList控件的Text属性(强制性),可以通过设置SelectedValue来设置选中哪一项 [feedback:xmzhu]。[fixed]\n\t-过滤提示消息中的换行符(转换为),否则提示信息可能导致页面渲染错误 [feedback:dcding]。[fixed]\n\t\n\t\n\t\n+2008-07-23 v0.3 beta10\n\t+完善Tree控件。[fixed]\n\t\t-如何将数据库中的数据绑定到Tree(示例在tree2_bind_database.aspx)。\n\t\t-ajax加载树节点,放在UpdatePanel中才有ajax的效果(示例在tree2_ajax.aspx)。\n\t\t-更改TreeNode的ID为NodeId,否则两个树中不能有相同ID的TreeNode,这是不合理的。\n\t-Grid的GridColumn的ID改名成ColumnId,否则同一个页面放置两个Grid,它们的GridColumn的ID不能同名,这是不合理的。注意需要更新以前的代码![fixed]\n\t-Grid所有类型的列增加DataTooltipField\u002FDataTooltipFormatString两个字段,以显示ToolTip(示例在grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-22 v0.3 beta9\n\t+IE6下,左侧导航链接的选中样式,以及鼠标移上去和移开的样式不对。[fixed]\n\t\t-发现原来ie6不能正确解析li的高度,必须手工设置才行(style=\"height:20px;\")。\n\t+IE6\u002FIE7下,模拟树的下拉列表如果文字长度太长,则显示的文字会换行,导致错位。[fixed]\n\t\t-虽然最后未能解决##差旅交通费在IE和Firefox下显示的不同效果。\n\t\t-但是通过用来代替,从而\u003Cem\u003E实现\u003C\u002Fem\u003EFF和IE下样式的统一。\n\t\t-刚看到old9的解决方案:把“差旅交通费”改成“差旅交通费”,在IE下和FF下的都不换行,:-)\n\t-LinkButton增加OnClick事件 [feedback:huihuang]。[fixed]\n\t-Window通过设置IFrameUrl和Popup不起作用的BUG。[feedback:xmzhu]。[fixed]\n\t+增加树控件(Tree)(示例在tree2.aspx)。[fixed]\n\t\t-可以在回发时维持树的状态(选中行,折叠\u002F展开,CheckBox)。\n\t\t-可以通过Inline的方式添加树节点,也可以绑定到XmlDocument\u002FXmlDataSource\u002FSiteMap。\n\t\t-点击树节点可以链接到页面,也可以引发PostBack事件,可以添加自定义脚本。\n\t\n\t\n\t\n+2008-07-16 v0.3 beta8\n\t+ContentPanel中放置ExtAspNet控件,则渲染时会出现各种问题,比如下拉列表显示样式出错,Grid没了滚动条等等。[fixed]\n\t\t-隐蔽性非常强,原来在ContentPanel中渲染ExtAspNet控件,如果容器的display='none',则会出现各种问题(主要是大小不对)。\n\t\t 必须设置容器为visibility='hidden',然后在渲染完成后显示容器。\n\t\t-现在Grid只要显示的设置高度和宽度,或者隐式的设定宽度高度(通过Anchor或Fit布局\u003Cem\u003E实现\u003C\u002Fem\u003E),只要超过Grid容器就会显示滚动条。\n\t+IE6下,在应用\u003Cem\u003EAsp.Net\u003C\u002Fem\u003EAjax后,Form中字段的宽度渲染不正确。[fixed]\n\t\t-调试相当困难,如果你有过在IE下通过alert发现问题的经历,你就能明白。\n\t\t-最后发现IE6下应用\u003Cem\u003EAsp.Net\u003C\u002Fem\u003EAjax后不仅Form中列的宽度设置不正确,而且主内容区域的宽度设置也不正确,不过最终我们还是顽强的修复了IE6下的这个BUG:\n\t\t 在MasterPage的onReady函数中,首先修正内容区域的宽度(region3.setWidth(pageLayout1.getSize().width - region2.getSize().width - 5);region3.doLayout();),然后修正页面中所有\u003Cem\u003E表单\u003C\u002Fem\u003E的宽度(box_fixFormWidthInIE6();):\n\t\t 示例在 Site.Master 页面。\n\t+集成的AspNetAjax有一个很大的BUG,只要你在页面上进行过ajax操作,当改变窗口大小时你会惊讶的发现内容区域的内容全部为空了![fixed]\n\t\t-解决方法相当怪异,经过一个下午的不断尝试,终于用一个怪异的方法解决(box.{0}.setSize(box.{0}.getSize());box.{0}.doLayout();),\n\t\t 这样的代码让我想起刷新窗口时那个方法(window.location.href=window.location.href;),不管怎么说,我对能很好的解决这个重大的BUG很是欣喜。\n\t\n\t\n\t\n+2008-07-14 v0.3 beta6\n\t-增加FlashObject控件。[fixed]\n\t-PageLoading增加EnableFadeOut属性(默认false),可以启用淡出效果。[fixed]\n\t-Accordion选中样式微调。[fixed]\n\t-预加载Form\u003Cem\u003E表单\u003C\u002Fem\u003E出错时提示信息的背景图片。[fixed]\n\t+Grid增加EnableDelayRender属性(默认false),可以加快页面的渲染速度(一个典型的20个记录的页面,可提前0.7s-1s显示出来)。[fixed]\n\t\t-因为延迟加载数据不会改变Grid的大小,所以对于非布局内或不设定高度宽度的Grid,需要设置\"EnableDelayRender=false\"。\n\t-改变Grid中静态的CheckBoxField图片。[fixed]\n\t-TabStrip增加TabIndexChanged事件,同时Tab增加EnablePostBack,可以在点击一个Tab时引起回发事件。这在延迟加载Tab的内容非常有用。(示例在tabstrip.aspx)[fixed]\n\t\n\t\n\t\n+2008-07-12 v0.3 beta5\n\t-页面菜单Toolbar的分割符和背景不相融合。[fixed]\n\t-\u003Cem\u003E表单\u003C\u002Fem\u003E字段之间可以比较大小,比如NumberBox可以和Label比较大小,同时增加CompareType,来指定比较的类型(示例在form_compare.aspx)。[fixed]\n\t\t-如果是同种类型的\u003Cem\u003E表单\u003C\u002Fem\u003E字段,不需要指定CompareType,比如两个NumberBox比较值的大小不需要指定CompareType,而一个NumberBox和TextBox比较大小需要指定CompareType。\n\t+如果在编辑页面使用AspNetAjax,则不能在回发时关闭当前窗口[feedback:huihuang](示例在ajax_editor_main.aspx\u002Fajax_editor.aspx)。[fixed]\n\t\t-这是由于ajax后执行的javascript中不能有return false语句。\n\t+在文本框失去焦点时,执行一些Javascript脚本(示例在textbox_blur.aspx) [feedback:xmzhu]。[fixed]\n\t\t-在页面添加onReady函数(会被系统调用),然后用javascript监视文本框值的改变。\n\t-弹出Window默认显示的错误页面,解决方法在当前目录添加一个空的html页面,然后把Window控件的IFrameUrl指向这个页面而不是\"#\"。[fixed]\n\t+弹出的窗口中的弹出窗口的如果内容发生变化,则点击右上角的关闭按钮时会有提示用户先保存的对话框,但是这个对话框的被第二个弹出窗口覆盖了 [feedback:xmzhu]。[fixed]\n\t\t-原来的调用方法太麻烦(见示例中alert\\alert_1.aspx和alert\\alert_2.aspx,总计 6 行代码),现在只需要 3 行代码就OK了。\n\t-点击提交按钮后变成灰色不可再次点击(示例在button_click_gray.aspx)[feedback:jima]。[fixed]\n\t+增加Menu、MenuText、MenuSeparator、MenuButton、MenuHyperLink控件,用于按钮的下拉菜单(示例在button_menu.aspx)。[fixed]\n\t-增加SplitButton控件。[fixed]\n\t\n\t\n\t\n+2008-07-09 v0.3 beta4\n\t-DataPicker默认的日期格式为(yyyy-MM-dd)。[fixed]\n\t+Form\u003Cem\u003E表单\u003C\u002Fem\u003E字段(TextBox,DropDownList...)之间可以比较大小 [feedback:huihuang]。[fixed]\n\t\t-增加ControlToCompare\u002FValueToCompare\u002FCompareOperator\u002FCompareMessage四个属性,示例在form_compare.aspx。\n\t+TabStrip中放置IFrame会出现渲染错误 (示例在tabstrip_iframe.aspx)[feedback:jima]。[fixed]\n\t\t-特殊处理,拥有IFrame的Tab如果不是激活Tab,则不设置Url,只有在激活时才设置Url。\n\t-RadioButtonList增加AutoPostBack属性(示例在radio.aspx) [feedback:xmzhu]。[fixed]\n\t-FormRow可以设置各列的宽度百分比 (示例在form_columnwidths.aspx)[feedback:jima]。[fixed]\n\t+\u003Cem\u003E表单\u003C\u002Fem\u003E字段Enable=false时显示颜色太浅 [feedback:jima]。[fixed]\n\t\t-覆盖缺省样式的.x-item-disabled,设置不透明。\n\t\n\t\n\t\n+2008-07-08 v0.3 beta3\n\t-Grid没有数据,向后翻页按钮可以点击的BUG [feedback:huihuang]。[fixed]\n\t+增加HiddenField控件。[fixed]\n\t\t-其实用TextBox也能模拟HiddenField的行为,只需要设置CssStyle=\"display:none;\"即可。\n\t+TriggerBox 如果 EnableTextBox = true,则不能将Text回发(这是html的限制)。[fixed]\n\t\t-最后的解决方案居然是设置 readonly=true,同时更改属性为 Readonly(示例在textbox2.aspx)。\n\t-模拟树的下拉列表在失去焦点后显示的文字不对的BUG。[fixed]\n\t+控制下拉列表某些项不可以选择(示例在dropdownlist2.aspx)。[fixed]\n\t\t-增加 DataEnableSelectField 属性,不可选择的项变灰,并且鼠标经过时没有样式。\n\t-LinkButton和Grid的LinkButtonField增加Enable属性(示例在hyperlink.aspx和grid.aspx)。[fixed]\n\t\n\t\n\t\n+2008-07-07 v0.3 beta2\n\t+增加UpdatePanelConnector控件,支持在布局构建的页面使用\u003Cem\u003EAsp.net\u003C\u002Fem\u003E Ajax。[fixed]\n\t\t-使用UpdatePanelConnector有一个要求:ContentTemplate下只能有一个子节点,比如box:Panel。\n\t\t-示例在ajax3.aspx\u002Fcontent_page4.aspx。\n\t\t-示例content_page3.aspx中,点击“Ajax查询”按钮和关闭弹出的窗口(点击右上角的叉)都引发异步更新。\n\t \n\t \n\t\n+2008-07-03 v0.3 beta1\n\t+容器控件的AutoHeight\u002FAutoWidth默认为false。[fixed]\n\t\t-使用GroupPanel的地方需要手工添加AutoHeight=\"true\"属性。\n\t+增加UserControlConnector,可以在其中放置用户控件(示例在page_usercontrol.aspx)。[fixed]\n\t\t-也可以在ContentPanel中放置用户控件,注意两者的区别。\n\t+增加ContentPlaceHolderConnector,替换原来Region的ContentPlaceHolderId属性(示例在Site.master)。[fixed]\n\t+支持\u003Cem\u003EAsp.net\u003C\u002Fem\u003E ajax异步加载。[fixed]\n\t\t-有很大局限性,只能在ContentPanel中使用,示例在ajax1.aspx\u002Fcontent_ajax2.aspx中。\n\t\t-对于使用布局构建的页面(比如content_page1.aspx)还不能使用\u003Cem\u003EAsp.net\u003C\u002Fem\u003E ajax,因为页面是整体渲染的,先放弃。\n\t\n\t\n\t\n+2008-07-02 v0.2 beta12\n\t+关闭前提示当前页面已经被修改(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-支持Iframe内按钮和window右上角关闭按钮。\n\t\t-删除CloseAction属性,可以在后台通过OnClientCloseButtonClick属性指定(为了和iframe中做法一致)。\n\t+iframe中的alert\u002Fconfirm要覆盖整个父页面,而不仅仅是iframe页面。[fixed]\n\t\t-在Firefox下还有问题。[fix pending]\n\t+排序时在标题栏显示排序箭头,可以排序的列标题光标为手形(示例在grid_sorting.aspx)。[fixed]\n\t\t-可以通过设置Grid1.CurrentSortColumnIndex = 0;来强制某列显示排序箭头。\n\t\t-可以通过 Grid1.Columns[Grid1.CurrentSortColumnIndex].SortExpression 的方式取得当前Grid的排序表达式。\n\t+HyperLinkField\u002FWindowField的链接地址支持服务器端格式(即是~\u002Falert.aspx)。[fixed]\n\t-TabStrip的Tab中如果放置ContentPanel,则内容渲染位置不正确。[fixed]\n\t-可以在ContentPanel中放置用户控件(示例在page_usercontrol.aspx)。[fixed]\n\t\t\n\t\n\t\n+2008-06-30 v0.2 beta11\n\t-增加TwinTriggerBox控件(示例在twintriggerbox.aspx)。[fixed]\n\t-Grid的数据库分页需要增加属性IsDatabasePaging=true,以便普通分页和数据库分页,否则在添加删除记录时总记录数不会变化 [feedback:zgjiang2]。[fixed]\n\t-关闭Window时PostBack事件OnClose可以指定参数,来区分是哪些操作引发的PostBack事件 [feedback:zgjiang2](示例在window_postback.aspx)。[fixed]\n\t-如果\u003Cem\u003E表单\u003C\u002Fem\u003E验证不通过,则需要弹出对话框提示(第一个没通过验证的字段)(目前还不能切换到相应的tab)。[fixed]\n\t+页面中任意可输入\u003Cem\u003E表单\u003C\u002Fem\u003E字段发生变化,可提示先保存。(示例在content_page1.aspx\u002Fsimpleform.aspx)[fixed]\n\t\t-目前还不支持Window右上角关闭按钮的提示保存功能。\n\t-Master\u002FContent的内容页中Grid的Sort事件不起作用的BUG [feedback:zgjiang2]。[fixed]\n\t-Grid中的LinkButtonField设置ConfirmText会出错 [feedback:huihuang]。[fixed]\n\t-增加静态类Confirm。[fixed]\n\t\n\t\n\t\n+2008-06-27 v0.2 beta10\n\t+Grid完善。[fixed]\n\t\t-CheckBoxField在回发时不能保持状态的BUG (已经更新了grid_checkboxfield.aspx示例)。\n\t\t-Grid中模拟树显示,GridColumn增加DataSimulateTreeLevelField属性(一个Grid只能有一个Column指定此属性),指定此列模拟树显示时的层次字段(0,1,2,...)(示例在grid_simulate_tree.aspx)。\n\t\t-切换分页时清空选中的值 [feedback:jqpeng]。\n\t\t-增加PreRowDataBound事件,可以在数据绑定之前设置某列的属性 [feedback:xmzhu] (示例在grid_prerowdatabound.aspx)。\n\t-DropDownList模拟树的方式显示,增加DataSimulateTreeLevelField属性,使用方法和Grid的类似(示例在dropdownlist_simulate_tree.aspx)。\n\t\n\t\n\t\n+2008-06-25 v0.2 beta9\n\t+Window窗体中的","createTime":"2010-09-29 14:37:08","dataReportQuery":"spm=1035.2023.3001.6557&utm_medium=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default&depth_1-utm_source=distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default","dataReportClick":"{\"mod\":\"popu_645\",\"index\":\"5\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fwode2600\u002F2726130\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713862001382_29045\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","dataReportView":"{\"mod\":\"popu_645\",\"index\":\"5\",\"dest\":\"https:\u002F\u002Fdownload.csdn.net\u002Fdownload\u002Fwode2600\u002F2726130\",\"strategy\":\"2~default~OPENSEARCH~Rate\",\"extra\":\"{\\\"utm_medium\\\":\\\"distribute.pc_relevant_bbs_down_v2.none-task-download-2~default~OPENSEARCH~Rate-5-2726130-bbs-360134776.264^v3^pc_relevant_bbs_down_v2_default\\\",\\\"dist_request_id\\\":\\\"1713862001382_29045\\\"}\",\"spm\":\"1035.2023.3001.6557\"}","type":"download"}],"staffDOList":[{"id":null,"communityId":211,"username":"community_93","userNickname":"ASP.NET","roleCode":1,"status":1,"createUsername":"","updateUsername":"","avatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","createTime":"2021-05-12 18:07:05","updateTime":"2021-05-12 18:07:05","lastLoginTime":"2021-05-12 18:07:05"},{"id":null,"communityId":211,"username":"dotnetconf","userNickname":".Net开发者社区","roleCode":2,"status":1,"createUsername":"community_93","updateUsername":"","avatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Fdefault.jpg!1","createTime":"2022-12-01 00:26:57","updateTime":"2022-12-01 00:26:57","lastLoginTime":"2022-12-01 00:26:57"},{"id":null,"communityId":211,"username":"weixin_41960540","userNickname":"R小R","roleCode":2,"status":1,"createUsername":"community_93","updateUsername":"","avatarUrl":"https:\u002F\u002Fprofile-avatar.csdnimg.cn\u002Faa17748a52c84d88ba031f9895a4ea32_weixin_41960540.jpg!1","createTime":"2022-04-16 21:18:57","updateTime":"2022-04-16 21:18:57","lastLoginTime":"2022-04-16 21:18:57"}],"communityConfig":{"scoreType":0,"scoreItems":{"0":"给本帖投票","1":"锋芒小试,眼前一亮","2":"潜力巨大,未来可期","3":"持续贡献,值得关注","4":"成绩优异,大力学习","5":"贡献巨大,全力支持"}},"shouldApply":false,"subscribeAble":false,"operatorAble":false,"commentNeedJoinCommunity":false},"default2014LiveRoom":[{"itemType":"","description":"高峰论坛","title":"2022 技术英雄会","url":"https:\u002F\u002Flive.csdn.net\u002Froom\u002Fiframe\u002Fcsdnnews\u002FfsNR5NWp?chat=1&title=1&footer=1","images":["https:\u002F\u002Fimg-home.csdnimg.cn\u002Fimages\u002F20221016050009.png"],"ext":{"time":"9:00","liveRoomUrl":"https:\u002F\u002Flive.csdn.net\u002Froom\u002Fcsdnnews\u002FfsNR5NWp"}}]},"isGooglebot":false,"canonical":"https:\u002F\u002Fwww.csdn.net\u002Ftopics\u002F360134776","openUrl":"","isApp":false,"localUrl":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F360134776","typeId":"20680","hasIndex":false},"CFG":{"ALIPLAYER_VERSION":"v4","ALIPLAYER_H5_VERSION":"mobile_v1","ENV":"prod","ROOT_URL":"https:\u002F\u002Fcms-mall.csdn.net\u002F","VUE_APP_API_URL_SERVER":"http:\u002F\u002Fcms-community-api.internal.csdn.net\u002F","VUE_APP_API_URL":"https:\u002F\u002Fcms-api.csdn.net\u002F","LOGIN_URL":"https:\u002F\u002Fpassport.csdn.net\u002Faccount\u002Flogin","VUE_APP_DOMAIN_SKILL":"https:\u002F\u002Fedu.csdn.net\u002F","VUE_APP_DOMAIN_PATH":"https:\u002F\u002Fedu.csdn.net\u002F","VUE_APP_COMMUNITY_API_URL":"https:\u002F\u002Fcommunity-api.csdn.net\u002F","VUE_APP_CCLOUD_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002Fcommunity-cloud\u002Fv1\u002F","VUE_APP_SKILL_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002Fskilltree\u002Fapi\u002F","VUE_APP_SEARCH_PLUGIN_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002Fsearchplugin\u002F","VUE_APP_COMMUNITY_ASK_API_URL":"https:\u002F\u002Fmp-ask.csdn.net\u002F","VUE_APP_ME_URL":"https:\u002F\u002Fme.csdn.net\u002F","VUE_APP_CCLOUD_RESUME":"https:\u002F\u002Fbizapi.csdn.net\u002Fjob-api\u002F","VUE_APP_CCLOUD_MAIN":"https:\u002F\u002Fwww.csdn.net\u002F","VUE_APP_CCLOUD_UC":"https:\u002F\u002Fwww.csdn.net\u002F","VUE_APP_CCLOUD_BZP_API_URL":"https:\u002F\u002Fbizapi.csdn.net\u002F","VUE_APP_CCLOUD_START_API_URL":"https:\u002F\u002Fmp-action.csdn.net\u002F","VUE_APP_PRACTIVE":"https:\u002F\u002Fbizapi.csdn.net\u002Fdaily-practice\u002F","VUE_APP_CCLOUD_HOSTPATH":"https:\u002F\u002Fbbs.csdn.net\u002F"},"queries":{"pageId":[],"domain":["ccloud.csdn.net\u002Fccloud\u002Fdetail1"],"id":["360134776"],"deviceType":"pc","isSpider":"","hostname":["bbs.csdn.net"]},"basePath":"bbs.csdn.net\u002Fccloud\u002Ftopics\u002F360134776","hrefUrl":"https:\u002F\u002Fbbs.csdn.net\u002Ftopics\u002F360134776","active":0,"navBarFixed":false,"title":"asp.net如何实现php表单数组?","isLive":false,"contentType":{"text":"text","picture":"picture","link":"link","video":"video","vote":"vote","live":"live","blog":"blog","long_text":"long_text","task_text":"task_text"},"liveUrl":"https:\u002F\u002Flive.csdn.net\u002Froom\u002Fiframe\u002F","spmExtra":{"id":211,"topicId":360134776},"keywords":"","description":"以下内容是CSDN社区关于asp.net如何实现php表单数组?相关内容,如果想了解更多关于.NET社区社区其他内容,请访问CSDN社区。"};</script><script type="text/javascript" src="https://csdnimg.cn/release/cmsfe/public/js/runtime.3e5c09eb.js"></script><script type="text/javascript" src="https://csdnimg.cn/release/cmsfe/public/js/chunk/common.7672e502.js"></script><script type="text/javascript" src="https://csdnimg.cn/release/cmsfe/public/js/chunk/tpl/ccloud-detail/index.243a94d0.js"></script></body> <!----> <script> window.csdn.sideToolbar = { options: { qr: { isShow: true, data: [ { imgSrc: 'https://csdnimg.cn/release/cmsfe/public/img/ewm.9010d6e5.png', desc: "关注公众号" }, ] }, help: { isShow: false, }, contentEl: document.getElementsByClassName("cloud-maintainer")[0] }, }; </script> <script src="https://g.csdnimg.cn/side-toolbar/2.9/side-toolbar.js" ></script> <!----> <!----> <!----> <script src="https://csdnimg.cn/release/blog_editor_html/release1.7.5/ckeditor/plugins/codesnippet/lib/highlight/highlight.pack.js"></script> <script src="https://g.csdnimg.cn/lib/editor-page-detail/v2.2.0/js/runDetail.min.js"></script> <!----> <!----> <!----> <!----> <!----> <!----> <script src="https://g.csdnimg.cn/collection-box/2.1.0/collection-box.js"></script> <!----> <!----> <!----> <!----> <script src="https://g.csdnimg.cn/common/csdn-cert/csdn-cert.js"></script> <!----></html>