摘要: ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。 ExtAspNet 是为了创建没有 JavaScript,没有 CSS,没有 UpdatePanel,没有 ViewState,没有 WebServices 的网站应用程序。从2008年4月开始,ExtAspNet一直在默默地坚持,有过骄傲,有过彷徨,但从未放弃。龙年伊始,我们迎来了ExtAspNet的一个重要更新——V3.0。V3.0包含很多重要的更新,分别列举如下:姗姗来迟的文件上传控件虽然之前可以通过ASP.NET的FileUpload控件来实现同样的功能,但阅读全文
posted @ 2012-01-28 20:19 三生石上 阅读(4803) 评论(64) 编辑
摘要: 提出问题如果识别出页面中JavaScript函数的性能问题,在不同浏览器下有不同的测试工具:Firefox下使用Firebug的Profile工具Chrome下使用内置的Profile工具IE9下也有Profile工具虽然大家的功能一个比一个炫,但是始终解决不了两个问题:如何只检测指定命名空间下的函数性能,否则会产生大堆的无用数据。不能跨浏览器使用,没有统一的参照物。同时不同工具之间还有一定差异的背景噪音影响。还有一点就是仍然占据主流的IE7和IE8没有内置的JavaScript性能检测工具。寻求解决方案首先在网上找到的一篇文章是John Resig在2008年6月发表的一篇文章,是够古老的了阅读全文
posted @ 2011-08-02 23:58 三生石上 阅读(3250) 评论(6) 编辑
摘要: 祝贺《JavaScript 秘密花园》中文翻译被官方正式采纳,大家以后可以随时通过官方网站浏览:http://bonsaiden.github.com/JavaScript-Garden/zh/由于这是一个不断更新的文档,如果有新的更新或者纠错我会及时更新中文翻译。这篇文章的起因是有网友提的 Issue:https://github.com/BonsaiDen/JavaScript-Garden/issues/#issue/68大致意思说是原文对 setInterval 的描述不大准确,而Stackoverflow.com上的描述才算正确。本着学习的态度,我又仔细看了两个描述:JavaScri阅读全文
posted @ 2011-03-28 00:12 三生石上 阅读(3676) 评论(12) 编辑
摘要: 程序员高品质新闻阅读网站 - CodingNews.org 聚集高品质英文技术类博客新闻网站,每小时更新。创新的即时预览功能,可以方便浏览文章内容。阅读全文
posted @ 2011-02-14 13:22 三生石上 阅读(1624) 评论(3) 编辑
摘要: 使用FreeMarker语法的JavaScript模板引擎 - jMarker - JavaScript Template using FreeMarker Syntax(开源 原创) 开源网址:http://code.google.com/p/jmarker/阅读全文
posted @ 2010-06-13 19:43 三生石上 阅读(2543) 评论(5) 编辑
摘要: 前段时间我曾经对JavaScript中的应用技巧进行了收集和总结,形成了以下几篇文章。 这里我将会对这些应用技巧进行集中描述,如果你觉得遗漏了一些好用的应用技巧,也请在留言中提出,我会及时更新到这篇文章中的。阅读全文
posted @ 2009-08-30 14:58 三生石上 阅读(5444) 评论(28) 编辑
摘要: 现在很多企业都上马了Web2.0项目,而Web2.0的一个重要特征就是AJAX交互。那么如何在企业Web2.0项目中对大量JavaScript脚本进行质量控制,是很多人头疼的问题。 我最近开源了一个项目JSLint-Toolkit,可以方便的解决这个问题的。阅读全文
posted @ 2009-08-21 21:54 三生石上 阅读(6883) 评论(21) 编辑
摘要: 正因为JavaScript本身没有完整的类和继承的实现,并且我们也看到通过手工实现的方式存在很多问题, 因此对于这个富有挑战性的任务网上已经有很多实现了。 这个系列的文章将会逐一深入分析这些实现,最终达到对JavaScript中如何实现类和继承有一个深入的了解。阅读全文
posted @ 2009-07-08 12:37 三生石上 阅读(13798) 评论(25) 编辑

ExtAspNet中有哪些常用的表单控件,它们有什么共同点和不同点,这一篇文章我们就来说道说道。

 

表单控件的公共属性

所有的表单都具有如下属性:

  1. ShowLabel:是否显示标签(默认值:true)。
  2. ShowEmptyLabel:是否显示空白的标签(默认值:false)。
  3. Label:标签文本(默认值:"")。
  4. LabelSeparator:表单中字段与标签的分隔符,可以通过Web.config、PageManager、Form三个级别进行控制,一般不需要设置此属性(默认值:PageManager中的设置参数)。
  5. ShowRedStar:在标签后面显示红色的星号(用来标识必填项),一般与Required等表单验证属性配合使用。
  6. Readonly:表单控件的只读状态(默认值:false)。
  7. TabIndex:Tab按键的跳转顺序,一般不需要设置此属性,页面会根据控件的出现顺序自动决定Tab按键的跳转顺序(默认值:null)。
  8. OffsetRight:距离右侧边界的宽度,可以通过Web.config、PageManager、Form三个级别进行控制,一般不需要设置此属性(默认值:PageManager中的设置参数)。
  9. ToolTip:提示文本(默认值:"")。
  10. ToolTipTitle:提示文本的标题(默认值:"")。
  11. ToolTipAutoHide:是否自动隐藏提示信息(默认值:true)。

注意:很多属性只有在表单内才有意义,比如ShowLabel、Label、OffsetRight等属性。在表单外放置的表单控件是不显示标签的。

 

 

还有一些属性是特定表单控件才具有的,如下所示:

  1. Text:显示文本。
  2. EmptyText:文本框为空时显示的文本(只对文本输入框、日期选择器等少数几个控件有效)。
  3. AutoPostBack:是否自动回发(只对下拉列表、日期选择器、文本输入框等少数几个控件有效)。
  4. EncodeText:是否对文本进行编码(只对文本标签、超链接、链接按钮等少数几个控件有效)。

 

除此之外,有些表单控件公共分享了很多表单验证属性。下一篇文章我们会详细介绍表单验证相关的属性。

 

下面我们会把部分表单控件所特有的一些属性通过示例进行集中展示。

 

自动编码文本

默认情况下,Label的EncodeText属性为true,会对文本中的HTML进行编码。当然我们也可以设置EncodeText=false,从而将HTML片段赋值给Text属性,请看这个示例:

   1:  <ext:Label Text="普通的 Label 标签会自动编码字符串比如:<strong></strong>)" runat="server">
   2:  </ext:Label>
   3:  <br />
   4:  <ext:Label EncodeText="false" Text="<a href='http://www.ustc.edu.cn/' target='_blank'>中国科学技术大学</a>"
   5:      runat="server">
   6:  </ext:Label>
   7:  <br />
   8:  <ext:Label EncodeText="false" Text="<span style='color:red;font-weight:bold;'>修改文本的样式</span>"
   9:      runat="server">
  10:  </ext:Label>

页面显示效果如下所示:

image

 

 

自动回发的文本输入框

如何在文本输入框失去焦点时自动回发页面呢,下面的几行代码可以简单地实现这个功能?

<ext:TextBox runat="server" ID="TextBox1" EmptyText="文本框值改变则自动回发" Width="200" AutoPostBack="true"
        OnTextChanged="TextBox1_TextChanged">
</ext:TextBox>

 

protected void TextBox1_TextChanged(object sender, EventArgs e)
{
    labResult.Text = "文本框的值:" + TextBox1.Text;
}

 

富文本编辑器

ExtAspNet内置了一个富文本编辑器,对于HTML编辑要求不高的情况下,完全可以使用内置的HtmlEditor,这样不仅样式风格统一,而且编码非常方便。

image

 

有很多属性来控制HtmlEditor的显示,几乎覆盖了工具栏的每一项,如下所示:

  1. EnableAlignments:启用左右定位。
  2. EnableColors:启用颜色。
  3. EnableFont:启用字体。
  4. EnableFontSize:启用调整字体大小。
  5. EnableFormat:启用格式化。
  6. EnableLinks:启用创建链接。
  7. EnableLists:启用创建列表。
  8. EnableSourceEdit:启用源码视图。
  9. FontFamilies:字体列表。
  10. EnableChineseFont:启用中文字体。

上面所有属性的默认值都是true,其中特别需要提到的是EnableChineseFont,因为默认的字体都是英文的,而在国内环境中中文字体是必不可少了,所以ExtAspNet就把一些常见的中文字体配置到了富文本编辑器中。

image

 

 

有两个触发按钮的搜索框

这也是Web开发中的一个常见需求,一个用来搜索的文本输入框,当用户输入关键字并点击搜索按钮时,显示一个清空关键词的按钮。这个需求也被内置到了ExtAspNet中,这就是TwinTriggerBox,请看下面这个示例:

   1:  <ext:TwinTriggerBox ID="ttbxMyBox2" OnTrigger1Click="ttbxMyBox2_Trigger1Click" OnTrigger2Click="ttbxMyBox2_Trigger2Click"
   2:          Trigger1Icon="Clear" ShowTrigger1="False" EmptyText="搜索用户名" Trigger2Icon="Search"
   3:          runat="server">
   4:  </ext:TwinTriggerBox>
 
   1:  protected void ttbxMyBox2_Trigger2Click(object sender, EventArgs e)
   2:  {
   3:      if (!String.IsNullOrEmpty(ttbxMyBox2.Text))
   4:      {
   5:          // 执行搜索动作
   6:          Alert.ShowInTop(String.Format("在关键词“{0}”中搜索", ttbxMyBox2.Text));
   7:   
   8:          ttbxMyBox2.ShowTrigger1 = true;
   9:      }
  10:      else
  11:      {
  12:          Alert.ShowInTop("请输入你要搜索的关键词!");
  13:      }
  14:  }
  15:   
  16:  // 点击 TwinTriggerBox 的取消按钮
  17:  protected void ttbxMyBox2_Trigger1Click(object sender, EventArgs e)
  18:  {
  19:      // 执行清空动作
  20:      Alert.ShowInTop("取消搜索!");
  21:   
  22:      ttbxMyBox2.Text = "";
  23:      ttbxMyBox2.ShowTrigger1 = false;
  24:  }

TwinTriggerBox有很多用来控制显示隐藏触发按钮的属性,不过仅从它们的名字就能猜出功能,这也是ExtAspNet简单的原因之一。

 

显示效果如下图所示:

image

image

 

 

日期选择器

DatePicker也是Web开发中必不可少的一个控件,先来看下显示效果:

image

 

它的一些属性值得我们关注:

  1. SelectedDate:选择的日期。
  2. DateFormatString:日期格式字符串(默认值:"yyyy-MM-dd")。
  3. MaxDate:最大日期,大于此日期的以灰色显示,不可选择。
  4. MinDate:最小日期,小于此日期的以灰色显示,不可选择

注意:DateFormatString遵守DotNet默认的规则,简单概括如下:

    d 月中的某一天。一位数的日期没有前导零。
    dd 月中的某一天。一位数的日期有一个前导零。
    ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义。
    dddd 周中某天的完整名称,在 DayNames 中定义。
    M 月份数字。一位数的月份没有前导零。
    MM 月份数字。一位数的月份有一个前导零。
    MMM 月份的缩写名称,在 AbbreviatedMonthNames 中定义。
    MMMM 月份的完整名称,在 MonthNames 中定义。
    y 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示不具有前导零的年份。
    yy 不包含纪元的年份。如果不包含纪元的年份小于 10,则显示具有前导零的年份。
    yyyy 包括纪元的四位数的年份。

 

单选框列表与复选框列表

首先来看看各自的显示效果:

image

image

这两个控件不仅支持标签声明式的创建方式,如下所示:

   1:  <ext:RadioButtonList ID="RadioButtonList1" Label="列表一" runat="server">
   2:      <ext:RadioItem Text="可选项 1" Value="value1" />
   3:      <ext:RadioItem Text="可选项 2" Value="value2" />
   4:      <ext:RadioItem Text="可选项 3" Value="value3" Selected="true" />
   5:  </ext:RadioButtonList>

而且支持数据绑定的创建方式,如下所示:

   1:  <ext:RadioButtonList ID="RadioButtonList2" Label="列表二(一列)" ColumnNumber="1" runat="server">
   2:  </ext:RadioButtonList>
   1:  private void BindRadioButtonList()
   2:  {
   3:      List<TestClass> myList = new List<TestClass>();
   4:      myList.Add(new TestClass("1", "数据绑定值 1"));
   5:      myList.Add(new TestClass("2", "数据绑定值 2"));
   6:      myList.Add(new TestClass("3", "数据绑定值 3"));
   7:      myList.Add(new TestClass("4", "数据绑定值 4"));
   8:   
   9:      RadioButtonList2.DataTextField = "Name";
  10:      RadioButtonList2.DataValueField = "Id";
  11:      RadioButtonList2.DataSource = myList;
  12:      RadioButtonList2.DataBind();
  13:   
  14:      RadioButtonList2.SelectedValue = "3";
  15:  }

 

除此之外,它们还支持必选项验证、自动回发、多列显示、竖排显示等特性,因此下面这些属性也需要我们关注:

  1. Required:是否必填项。
  2. RequiredMessage:为空时提示信息。
  3. AutoPostBack:是否自动回发。
  4. ColumnNumber:渲染成几列。
  5. ColumnVertical:是否按照纵向顺序渲染。
  6. DataTextField:是否按照纵向顺序渲染。
  7. DataTextFormatString:显示文本的格式化字符串。
  8. DataValueField:显示值的数据字段。
  9. DataSource:数据源。
  10. SelectedIndex/SelectedValue/SelectedItem:选中项(适用于RadioButtonList)。
  11. SelectedIndexArray/SelectedValueArray/SelectedItemArray:选中项列表(适用于CheckBoxList)。

 

小结

除了上文提到的这些表单控件,还有一些其他表单控件,比如单选框、复选框、超链接、图片、链接按钮、隐藏字段、多行文本输入框、单触发器输入框,它们相对比较简单而无需过多的描述。

 

还有两个比较比较重要的表单控件——文件上传和下拉列表,我们会在接下来的两篇文章中详细描述。

 

 

喜欢ExtAspNet,来官方论坛交流使用心得。

 

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

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

posted @ 2012-02-19 12:29 三生石上 阅读(1032) 评论(3) 编辑

首先来看看如何修改Web.config文件,来配置ExtAspNet用到的全局参数:

 
   1:  <?xml version="1.0"?>
   2:  <configuration>
   3:      <configSections>
   4:          <section name="ExtAspNet" type="ExtAspNet.ConfigSection, ExtAspNet" requirePermission="false"/>
   5:      </configSections>
   6:      <ExtAspNet EnableBigFont="true" DebugMode="true" />
   7:      <appSettings/>
   8:      <connectionStrings/>
   9:      <system.web>
  10:          <pages>
  11:              <controls>
  12:                  <add assembly="ExtAspNet" namespace="ExtAspNet" tagPrefix="ext"/>
  13:              </controls>
  14:          </pages>
  15:          <httpModules>
  16:              <add name="ExtAspNetScriptModule" type="ExtAspNet.ScriptModule, ExtAspNet"/>
  17:          </httpModules>
  18:          <httpHandlers>
  19:              <add verb="GET" path="res.axd" type="ExtAspNet.ResourceHandler, ExtAspNet"/>
  20:          </httpHandlers>
  21:      </system.web>
  22:  </configuration>
 

ExtAspNet节中的全局参数

 
    • Theme: 控件主题,目前支持三种主题风格(blue/gray/access,默认值:blue)
    • Language: 控件语言(en/zh_CN/zh_TW/...,默认值:zh_CN)
    • FormMessageTarget: 表单字段错误提示信息的显示位置(side/qtip,默认值:side)
    • FormOffsetRight: 表单字段右侧距离边界的宽度(默认值:20px)
    • FormLabelWidth: 表单字段标签的宽度(默认值:100px)
    • FormLabelSeparator: 表单字段标签与内容的分隔符(默认值:":")
    • EnableAjax: 是否启用AJAX(默认值:true)
    • AjaxTimeout: AJAX超时时间(单位:秒,默认值:60s)
    • EnableBigFont: 是否启用大字体,将ExtJS默认11px的字体全部改为12px,否则显示的中文字体太小(默认值:false)
    • DebugMode: 是否开发模式,启用时格式化输出页面JavaScript代码,便于调试(默认值:false)
 
注意:EnableBigFont用来将默认11px的字体全部改写为12px,因为用11px显示中文字体太小,建议启用这个参数。
开启DebugMode则会格式化输出页面生成的JavaScript(如下图所示),便于调试时发现问题,在正式发布时一定不要忘记关闭此参数。
image
 

system.web节中的配置

 

 

1. pages->controls节是为了定义ASPX页面引用控件的前缀,比如在页面中的按钮这样定义:

<ext:Button ID="Button1" Text="展开全部" runat="server"> </ext:Button>

注意:正如我们在前一节提到的,虽然可以在每个页面头部添加如下声明:<%@ Register Assembly="ExtAspNet" Namespace="ExtAspNet" TagPrefix="ext" %> 但这种做法过于麻烦,建议在Web.config中增加此配置项。

 
 

2. httpModules节是为了在AJAX的环境中使用ASP.NET的 Response.Redirect 方法。

太棒了太棒了太棒了

当我们使用ASP.NET的 Response.Redirect 方法时,响应状态码为302,并在Location响应头中指定要跳转的页面,如下图所示:

image_thumb8

查看ScriptModule.cs的源代码,我们会发现这个类拦截了HTTP响应,过滤出302的响应并返回一段JavaScript代码:

   1:  if (response.StatusCode == 302)
   2:  {
   3:      string redirectLocation = response.RedirectLocation;
   4:      response.Write(String.Format("window.location.href='{0}';", redirectLocation));
   5:  }
 
注意: 如果你不会在代码中使用 Response.Redirect 方法,就不需要添加这个配置项。在这种情况下,你也可以使用ExtAspNet提供的PageContext.Redirect 方法,它的作用和 Response.Redirect 一样。PageContext是ExtAspNet提供的一个静态类,用来辅助输出一个常用的JavaScript代码,你可以查看源代码来获取更多信息。
 
 

3. httpHandlers节是为了在JavaScript中引用内置在ExtAspNet中的图标。

ExtAspNet中内置了很多小图标,完整的列表请查看http://extasp.net/config/icons.htm

在JavaScript中可以简单的这样引用:

var icon1 = "./res.axd?icon=PageWhiteCode";
 

太棒了

其实在引入这个配置之前,还有一种获取内置图标地址的方法:
var icon1 = '<%= IconHelper.GetIconUrl("PageWhiteCode") %>';
只不过后一种方法有两个缺点:
1. 这段代码必须放置在ASPX代码中。 
2. 生成的图标地址比较长

微笑

,类似于 /WebResource.axd?d=uDW5YUf2DLqBMvxRUQV3DtdjJW0RlswTCbxrvdhA0tGWb3upJGuodhzh1yEG__2ZgMXdSeA_pmqoD35VFyWVpubH5Zn_hj2CEKssW2m_HGku1Lz4_G1iEWjpv37FKL3P67p17A2&t=634405189453149561
 

注意:如果你不会在JavaScript中引用内置在ExtAspNet.dll中的图标,可以不添加这个配置项。

 

小结

一个简单的Web.config其实还是包含不少的知识,只要我们遇事冷静多思考,总会有收获的。

 

下一篇文章我们会关注PageManager控件,为什么每个页面都要添加一个PageManager控件呢?

 

 

喜欢ExtAspNet,来官方论坛交流使用心得。

 

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

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

posted @ 2012-02-18 19:09 三生石上 阅读(859) 评论(0) 编辑

这篇文章我们会从头开始使用ExtAspNet,最终完成一个模拟用户登录的界面,最终的效果图如下所示:

image_thumb1

 

 

项目准备

1. 新建一个ASP.NET Web应用程序项目。

2. 从开源网站下载最新版本的ExtAspNet,并在新建项目中添加对ExtAspNet.dll的引用。

image_thumb8

 

 

新建一个ASPX页面

1. 在<html>标签上面添加声明

<%@ Register Assembly="ExtAspNet" Namespace="ExtAspNet" TagPrefix="ext" %>
 
2. 在<form>标签中添加PageManager控件
<ext:PageManager ID="PageManager1" runat="server" />

每个使用ExtAspNet控件的页面都必须包含一个PageManager控件,此控件用来控制页面级别的全局参数。比如控制页面样式、语言、表单参数、AJAX参数以及布局的参数,后面会有一篇文章专门介绍这个控件。

 

3. 设计登陆表单

由于我们想让登录表单居中显示,所以在表单外部嵌套了一个Window控件,并让Window控件居中(其实是左右居中,上下位于黄金分割点的位置)显示。

<ext:Window ID="Window1" runat="server" Title="登录表单" IsModal="false" EnableClose="false" WindowPosition="GoldenSection" Width="350px">
</ext:Window>



太棒了太棒了太棒了

这个所谓的黄金分割点是通过 WindowPosition="GoldenSection" 设置的,这也是ExtAspNet的一个创新点(据说人眼在查看网页时,视线偏上一点大致位于黄金分割点的位置,而不是正中心)。

image_thumb3

实现这一功能的代码在/ExtAspNet/js/X/X.wnd.js中的_calculateGoldenPosition函数:

   1:  function _calculateGoldenPosition(bodySize, windowSize) {
   2:          var top = (bodySize.height - (bodySize.height / 1.618)) - windowSize.height / 2;
   3:          if (top < 5) {
   4:              top = 5;
   5:          }
   6:          var left = (bodySize.width - windowSize.width) / 2;
   7:          if (left < 0) {
   8:              left = 5;
   9:          }
  10:          return { left: left, top: top };
  11:  };
 
 

 

4. 在Window中添加SimpleForm控件

最终的ASPX中的Window标签如下所示:

   1:  <ext:Window ID="Window1" runat="server" Title="登录表单" IsModal="false" EnableClose="false"
   2:      WindowPosition="GoldenSection" Width="350px">
   3:      <Items>
   4:          <ext:SimpleForm ID="SimpleForm1" runat="server" ShowBorder="false" BodyPadding="10px"
   5:              LabelWidth="60px" EnableBackgroundColor="true" ShowHeader="false">
   6:              <Items>
   7:                  <ext:TextBox ID="tbxUserName" Label="用户名" Required="true" runat="server">
   8:                  </ext:TextBox>
   9:                  <ext:TextBox ID="tbxPassword" Label="密码" TextMode="Password" Required="true" runat="server">
  10:                  </ext:TextBox>
  11:                  <ext:Button ID="btnLogin" Text="登录" Type="Submit" ValidateForms="SimpleForm1" ValidateTarget="Top"
  12:                      runat="server" OnClick="btnLogin_Click">
  13:                  </ext:Button>
  14:              </Items>
  15:          </ext:SimpleForm>
  16:      </Items>
  17:  </ext:Window>

这个示例涉及PageManager、Window、SimpleForm、TextBox、Button几个控件,很多属性都是不言自明的,后面我们也会详细介绍。

 

后台代码

   1:  protected void btnLogin_Click(object sender, EventArgs e)
   2:  {
   3:      if (tbxUserName.Text == "admin" && tbxPassword.Text == "admin")
   4:      {
   5:          Alert.ShowInTop("成功登录!");
   6:      }
   7:      else
   8:      {
   9:          Alert.ShowInTop("用户名或密码错误!", MessageBoxIcon.Error);
  10:      }
  11:  }

这里的逻辑很简单,如果用户名和密码正确,就弹出对话框显示“成功登录!”,否则显示错误信息。

image_thumb6

image_thumb4

 

 

小结

整个示例虽然看似简单,却实现了很多普通ASP.NET无法实现或难以完成的任务:

1. 不用一行JavaScript代码完成表单的居中显示

2. 一个可拖动的窗体

3. 用户名和密码输入框的客户端验证

4. 表单回发不是整个页面的回发,而是AJAX(这也是ExtAspNet所特有的原生AJAX,无需任何配置和特殊的代码就默认拥有AJAX特性)

5. 漂亮的提示框是通过C#代码生成的(并且可以在当前页面框架或者父页面框架中显示,这也是ExtAspNet所特有的基于IFrame的框架)

下一篇文章我们会关注对Web.config的修改,来配置ExtAspNet所需的全局参数。

 

 

 

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

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

posted @ 2012-02-12 11:46 三生石上 阅读(1341) 评论(4) 编辑

首先来看看ExtAspNet是什么?

ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。
ExtAspNet 是为了创建没有 JavaScript,没有 CSS,没有 UpdatePanel,没有 ViewState,没有 WebServices 的网站应用程序。

 

从这段官方描述中,我们看到了三个信息点:

  1. 基于ExtJS。大家都知道ExtJS是一个很绚丽的JavaScript控件库,非常适合进行各种管理系统的开发。但是对于很多开发者而言,写上一堆一堆的JavaScript代码无疑是一个噩梦。
  2. ASP.NET2.0控件库。大家都知道ASP.NET的WebForm开发的最大优点是快速开发,而ViewState则是这种快速开发的基石,使得我们使用C#代码操作页面上控件的任何属性。它的缺点也很明显,在Web2.0的时代每次都是整个页面回发(PostBack)显然过于落伍,并且默认的控件外观过于简陋。由于ExtAspNet是基于ASP.NET2.0的控件库,所以可以自由地应用到DotnetFramework2.0、3.5、4.0的项目中。
  3. ExtAspNet则是将ExtJS和ASP.NET进行深度整合的产物。大量基于JavaScript和CSS却不需要程序员编写JavaScript和CSS;原生的AJAX支持却不需要依赖ASP.NET AJAX的UpdatePanel;快速的ASP.NET开发模式却不需要ViewState的参与。最终ExtAspNet剩下的只是简单的ASP.NET控件。学习ExtAspNet只需要你有ASP.NET的开发基础,不需要事先学习ExtJS,因为ExtAspNet是一个深度封装的控件库。

 

最终,我们可以给出如下一个简单的公式:

ExtAspNet控件库 = 绚丽的ExtJS界面 + 快速的ASP.NET开发 + 简单的代码编写

ExtAspNet

 

ExtAspNet的设计理念

 

一切为了简单。

ExtAspNet最初的设计目的就是让ASP.NET开发人员在不需要了解JavaScript和ExtJS的情况下快速开发出漂亮的Web2.0应用。因此每个控件的编写都尽量符合ASP.NET的开发习惯,从控件和属性的命名到复杂的AJAX交互,都让传统的ASP.NET开发人员感到很舒服,这也是ExtAspNet经过四年的风雨历程仍然深受广大开发者喜爱的原因。

 

用心实现80%的功能。

ExtAspNet最初是项目驱动的管理系统的开发,因此控件的开发优先级都是服务于项目的需要,对常见的80%的功能进行精雕细琢的设计开发,并独创了很多服务于实际需求的功能,比如原生的AJAX支持、轻量级的数据传输以及基于IFrame的页面框架。因此ExtAspNet不会追求对ExtJS进行完全的封装,但是会在80%的常见功能上进行细致入微的设计和思考。

 

创新所以独一无二。

ExtAspNet能够在高手如林的ASP.NET控件库领域拥有一席之地,靠的不是漂亮的脸蛋或者复杂的功能,而是简单而实用的创新。正如前文提到的那样,原生的AJAX支持使得ASP.NET开发人员根本没有意识到自己开发的程序是Web2.0的无刷新风格,因为编写的代码和传统的ASP.NET代码几乎一样;轻量级的数据传输完全抛弃了不适合AJAX的ViewState,而是自创了XState进行数据传输,从而减少网络流量;基于IFrame的页面框架更是给开发人员一个分而治之的设计模式,弹出窗体不在局限于IFrame框框中。

 

为什么选择ExtAspNet?

 

1. 快速的项目开发

基于您熟悉的 C# 和 ASP.NET 2.0 开发模式,不需要 JavaScript 代码就能完成真正的 Web 2.0 应用。不仅能够极大的减少开发时间和降低开发成本,而且方面维护升级。

2. 基于现有的ASP.NET知识

虽然 ExtAspNet 是基于 ExtJS的控件库,但是不需要你事先了解 ExtJS 的知识,因为 ExtAspNet 完全按照 ASP.NET 的命名习惯和开发流程完成,你甚至会发现有些控件的属性,方法和事件和原生的 ASP.NET 控件一模一样。

3. 丰富的控件库

超过 50 个专业的 ASP.NET 控件,不仅帮助您快速实现业务逻辑,而且让页面更加生动和华丽。

4. 跨浏览器支持

ExtAspNet 使用 C# 替代传统的 JavaScript 开发,不仅提高了开发效率,而且确保在所有主流的浏览器下流畅运行。

5. 多皮肤支持

ExtAspNet 不仅内置 3 种不同风格的界面皮肤,而且允许您自定义自己的皮肤,满足项目的个性化需求。

6. 页面无刷新

所有的页面回发都不会导致整个页面重新渲染,而只有部分页面得到更新。而这个 AJAX 过程对开发人员完全透明,您可以向往常一样在服务器端改变控件属性,而这个修改会直接反映更新到前台页面,而不需要任何额外的代码。

7. 轻量级的数据传输

ViewSate 是 WebForm 开发模式的基石,带来便利的同时也增大了数据传输。 ExtAspNet 独创的 XState 实现,不仅保留便利而且极大的减少了数据的传输量。

8. 丰富的示例教程

超过 100 个示例和丰富的教程让你全面掌握 ExtAspNet 的各种用法。

9. 全中文支持

从实例教程,到BBS论坛,再到QQ群,全程中文社区,让你再无语言障碍。

10. 开源免费

ExtAspNet 可以免费应用于任何非商业或者商业性的项目,采用对商业应用友好的Apache License 2.0协议。

 

ExtAspNet与ExtJS,ExtNet,ExtJsExtender的区别?

 

ExtJS是纯JavaScript的控件库,所以适用于后台为PHP,ASP.NET或者JSP的项目,并且是ExtAspNet和其他库的基础。

 

ExtNet是国外一家公司开发的基于ExtJS的ASP.NET控件库,从功能上讲比较完善,不过开发模型相对复杂,如果你喜欢ExtNet的开发风格或者需要使用ASP.NET MVC,可以尝试这个控件库。

 

ExtJsExtender是一个比较早的基于ExtJS的ASP.NET控件库,但是功能过于简陋,长期没有更新,并且对ASP.NET AJAX有依赖。

 

ExtAspNet是一组基于ExtJS的ASP.NET控件库,也是本系列文章的主角。最大的优点就是简单实用。基于ASP.NET2.0,项目中只需要引用一个ExtAspNet的DLL,没有其他依赖。还要注意ExtAspNet只适合WebForm的项目,不适合ASP.NET MVC的项目。

 

ExtAspNet的许可协议

 

从ExtAspNet v3.1.0开始,ExtAspNet采用对商业应用友好的Apache License 2.0参考这篇文章

 

注:

    1. ExtAspNet v3.1.0之前的版本使用的是GPL v2授权协议。
    2. ExtAspNet授权协议仅适用于ExtAspNet应用程序本身。
    3. 由于ExtAspNet是基于ExtJS的应用,所以如果您在商业应用中使用了ExtAspNet,请向ExtJS官方购买商业授权。

 

 

ExtAspNet社区交流

 

示例:http://extasp.net/

论坛:http://bbs.extasp.net/

开源:http://extaspnet.codeplex.com/

博客:http://sanshi.cnblogs.com/

小组:http://home.cnblogs.com/group/extaspnet/

 

你也可以从博客中查找ExtAspNet的QQ交流群。

 

 

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

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

posted @ 2012-02-11 23:06 三生石上 阅读(1235) 评论(4) 编辑

提出问题

ExtAspNet开源以来,一直坚持开源免费的原则,但是其GPL v2的协议也让有些开发者感到为难,比如有人提到这个问题:http://www.cnblogs.com/sanshi/archive/2012/02/05/2339242.html

 

为了进一步明确ExtAspNet开源免费的原则(不仅是对个人开发者开源免费,而且对企业商业应用开源免费),我们查阅了ExtJS的授权协议,并且对比了各种不同的开源协议,最终选择了Apache License 2.0,也为您以后的商业应用免除后顾之忧。

 

分析问题 

首先来看ExtJS的授权协议

ExtJS Open Source License

Sencha is an avid supporter of open source software. Our open source license is the appropriate option if you are creating an open source application under a license compatible with the GNU GPL license v3. Although the GPLv3 has many terms, the most important is that you must provide the source code of your application to your users so they can be free to modify your application for their own needs.

也就是说,基于ExtJS的开源应用可以使用兼容GPL v3的开源协议,我们查阅了相关文档,发现有很多对商业应用友好的协议:

GNU Lesser General Public License (LGPL) version 3

This is the latest version of the LGPL: a free software license, but not a strong copyleft license, because it permits linking with non-free modules. It is compatible with GPLv3. We recommend it for special circumstances only.

Apache License, Version 2.0

This is a free software license, compatible with version 3 of the GPL.

Modified BSD license

This is the original BSD license, modified by removal of the advertising clause. It is a simple, permissive non-copyleft free software license, compatible with the GNU GPL.

Mozilla Public License (MPL) version 2.0

This is a free software license. Section 3.3 provides indirect compatibility between this license and the GNU GPL version 2.0, the GNU LGPL version 2.1, the GNU AGPL version 3.0, and all later versions of those licenses.

 

到底该选择哪个呢?关于这几种协议的对比,有一些中文文档:文档一文档二

 

这几种协议中,我比较熟悉的还是Apache License 2.0,因为我们身边的很多应用都是使用的Apache License 2.0,比如Http Server、Tomcat、Maven、Subversion、Structs、Hadoop,我们来看看其中文的简单定义:

Apache Licence 2.0

Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:

  1. 需要给代码的用户一份Apache Licence
  2. 如果你修改了代码,需要再被修改的文件中说明。
  3. 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
  4. 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。

Apache Licence也是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。

到底该选择哪一种呢?一时还拿不定主意。

 

解决问题

后来,无意中发现的一篇文章英文版)让我坚定了使用Apache License 2.0的决心。

我们来看下这组数据:

开源开发者首选的授权协议:

1.     GPL (68.9%)
2.     Apache License (7.6%)
3.     LGPL (6.7%)
4.     BSD License (5.3%)
5.     MIT License (4.1%)

被下载最多的开源项目:


1.     Apache License (32.7%)
2.     LGPL (21.0%)
3.     GPL (14.4%)
4.     BSD License (3.8%)
5.     MIT License (1.6%)


企业应用使用最多的授权协议


1.     Apache License (15.3%)
2.     MIT License (10.8%)
3.     BSD License (10.5%)
4.     GPL (9.5%)
5.     LGPL (8.9%)

 

此时已经很明朗了,ExtAspNet的应用场景大部分都是企业内管理系统,所以选择被企业使用最多的授权协议无疑是明智的选择,这才有了今天的这个决定:

 

从ExtAspNet v3.1.0开始,ExtAspNet将使用对商业应用友好的Apache License 2.0

ExtAspNet授权协议

 

 

 

注意:

  1. ExtAspNet授权协议仅适用于ExtAspNet应用程序本身。
  2. 由于ExtAspNet是基于ExtJS的应用,所以如果您在商业应用中使用了ExtAspNet,请向ExtJS官方购买商业授权。

 

喜欢ExtAspNet,快来加入官方交流论坛:http://bbs.extasp.net/

posted @ 2012-02-11 20:05 三生石上 阅读(3105) 评论(22) 编辑

鉴于广大网友的强烈要求,ExtAspNet的官方示例网站和官方论坛速度归来:

官方示例:http://extasp.net/

官方论坛:http://bbs.extasp.net/

这次将服务器移到了国内(盛大云主机),所以速度大大提升,我这边的访问速度基本维持在4s之内,不知道你们那边的怎么样?

 

虽然ExtAspNet现在已经有8个QQ群了(总人数在2000人左右),并且每天都有很多用户涌向这些群,但是QQ群有个致命弱点,那就是每个QQ群都有人数限制,导致信息过于分散,很多问题在各个QQ群被重复提及,因此一个无人数限制的论坛也是广大网友一直以来的心愿。

之前虽然也有官方论坛,但是由于服务器在国外,导致速度极慢经常抽风,也形同虚设。

 

这次,我们特意将服务器移回国内,速度也极大地提升,希望这次的官方论坛能够成为广大ExtAspNet爱好者交流学习的乐园。

 

再次,我们诚挚地邀请您加入ExtAspNet官方论坛,为ExtAspNet的发展壮大贡献自己的一份力量:

http://bbs.extasp.net/

 

 

注:为了防止水文泛滥,官方论坛只能通过QQ账号登陆,这样也免除了大家重新注册账号的麻烦。

posted @ 2012-02-10 22:31 三生石上 阅读(242) 评论(1) 编辑
摘要: 这是一个小版本更新,主要修正IE7,IE8下得兼容性问题。欢迎大家将使用中发现的问题以文章评论的形式反馈给我,我会尽可能快地更新版本。========================ExtAspNet - 基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果 ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。ExtAspNet 是为了创建没有 JavaScript,没有 CSS,没有 UpdatePanel,没有 ViewState,没有 WebServices 的网站阅读全文
posted @ 2012-02-05 20:08 三生石上 阅读(730) 评论(10) 编辑
摘要: 曾经最普普通通的按钮,在ExtAspNet中摇身一变,法力无边,下面就来看看你曾经最熟悉的按钮?按钮的状态与大小按钮有启用/禁用,按下/正常几种状态,对应的属性分别为Enabled、EnablePress、Pressed三个属性。显示效果如图所示:按钮有大中小三个尺寸,对应的属性为Size,显示效果如下所示:按钮上的图标按钮上的图标可以通过Icon(枚举类型,ExtAspNet内置了很多图标)或者IconUrl两个属性来指定,图标的位置可以位于文本的上下左右四个位置,通过IconAlign属性来指定。对于不显示文字的按钮,只需要指定Icon或者IconUrl属性,而不用指定Text属性即可。按阅读全文
posted @ 2012-02-05 11:40 三生石上 阅读(1995) 评论(10) 编辑
摘要: 每一个使用ExtAspNet控件的页面都必须包含一个PageManager控件,我们可以把PageManager控件看做页面级别的参数配置(相对于Web.config站点级别的参数配置)。页面级别的参数配置Theme: 控件主题,目前支持三种主题风格(blue/gray/access,默认值:blue)Language: 控件语言(en/zh_CN/zh_TW/...,默认值:zh_CN)FormMessageTarget: 表单字段错误提示信息的显示位置(side/qtip,默认值:side)FormOffsetRight: 表单字段右侧距离边界的宽度(默认值:20px)FormLabelW阅读全文
posted @ 2012-02-04 11:16 三生石上 阅读(1139) 评论(0) 编辑
摘要: ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,拥有完善的 AJAX 支持和丰富的界面效果。 ExtAspNet 是为了创建没有 JavaScript,没有 CSS,没有 UpdatePanel,没有 ViewState,没有 WebServices 的网站应用程序。从2008年4月开始,ExtAspNet一直在默默地坚持,有过骄傲,有过彷徨,但从未放弃。龙年伊始,我们迎来了ExtAspNet的一个重要更新——V3.0。V3.0包含很多重要的更新,分别列举如下:姗姗来迟的文件上传控件虽然之前可以通过ASP.NET的FileUpload控件来实现同样的功能,但阅读全文
posted @ 2012-01-28 20:19 三生石上 阅读(4803) 评论(64) 编辑
摘要: 【2012-1-28更新】计划在近期发布V3.0。不再维护extasp.net和bbs.extasp.net网站,国外主机速度太不给力,国内的主机价格太给力。将在博客园发布《ExtAspNet秘密花园》系列文章,预计会有30多篇文章,三个月内连载完毕。V3.0的主要更新包括:全中文的示例站点,增加上传控件、复选框列表、完善的布局管理,以及30多个的BUG修正或功能增强。希望热心网友继续贡献QQ交流群,目前有8个ExtAspNet技术交流群,只有一个未满。阅读全文
posted @ 2012-01-28 16:32 三生石上 阅读(341) 评论(4) 编辑
摘要: 提出问题如果识别出页面中JavaScript函数的性能问题,在不同浏览器下有不同的测试工具:Firefox下使用Firebug的Profile工具Chrome下使用内置的Profile工具IE9下也有Profile工具虽然大家的功能一个比一个炫,但是始终解决不了两个问题:如何只检测指定命名空间下的函数性能,否则会产生大堆的无用数据。不能跨浏览器使用,没有统一的参照物。同时不同工具之间还有一定差异的背景噪音影响。还有一点就是仍然占据主流的IE7和IE8没有内置的JavaScript性能检测工具。寻求解决方案首先在网上找到的一篇文章是John Resig在2008年6月发表的一篇文章,是够古老的了阅读全文
posted @ 2011-08-02 23:58 三生石上 阅读(3250) 评论(6) 编辑
摘要: 作者:Eran Hammer-Lahav译者:三生石上原文:Beginner's Guide to OAuth – Part II : Protocol Workflow声明:此中文翻译由三生石上独立完成,博客园首发,转载请注明出处。通过实际的案例学习OAuth有助于加深理解。规范文档的附录A中包含了一个类似的示例,只不过它聚焦HTTP请求响应的结构。这里对这个典型的OAuth会话应用重新进行演示,并从用户、消费者和服务提供商的角度看待问题。文中提到的网站和人员都是虚构的。不过提到的苏格兰人名是真的。我们的故事是这样开始的…Jane刚结束她的苏格兰之旅。她花了2周的时间在Islay岛上阅读全文
posted @ 2011-06-17 23:33 三生石上 阅读(1544) 评论(5) 编辑
摘要: 作者:Eran Hammer-Lahav译者:三生石上原文:http://hueniverse.com/2007/10/beginners-guide-to-oauth-part-i-overview/声明:此中文翻译由三生石上独立完成,博客园首发,转载请注明出处。提示:这篇文章包含一些过时的或者不正确的内容。最新的更新,可以访问这里:The Authoritative Guide to OAuth 1.0[①]。OAuth昨晚发布了最终稿(OAuth Core 1.0 Draft 4),对不熟悉此协议的新手来说,是深入学习了解它到底能做什么的时候了。我曾经写过一篇博文来描述OAuth的历史、阅读全文
posted @ 2011-06-17 15:17 三生石上 阅读(2162) 评论(1) 编辑
摘要: 引言ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库,从第一次发布至今已经有超过 3 年的时间,版本也大大小小发了 80 多个。今天想弄一个查看发布周期总体趋势的图表来,其实这个想法来自有 3 方面知识的碰撞:ExtAspNet 的发布版本丰富,足以形成一张不错的报表。记得以前买 MackBook 时,有一个提供 Apple 系列产品发布平均周期的网站,从而预测下一次产品更新的时间,为购买者提供参考意见。Google Chart 提供了一系列生成图表的在线服务。我们来动手选取合适的图表类型经过分析,我们发现 Column Chart 比较满足我们的需求。如果让阅读全文
posted @ 2011-05-11 19:45 三生石上 阅读(2144) 评论(1) 编辑