ASP.NET2.0页面框架的几处变化

作者:http://blog.joycode.com/liuhuimiao/

  1. 新增的页面事件
    在ASP.NET 2.0中,一个ASP.NET页面的生命周期主要为(红色字体表示ASP.NET 2.0新增加的阶段页面事件):客户端请求页面—》预初始化(OnPreInit)—》初始化(OnInit)—》完成初始化(OnInitComplete)—》载入ViewState(LoadViewState)—》处理回送数据(IPostBackDataHandler)—》Page_OnPreLoad—》Page_OnLoad—》回发更改通知(RaisePostDataChangedEvent)—》处理回发事件(RaisePostBackEvent)—》Page_OnLoadComplete—》预呈现(OnPreRender)—》完成预呈现(OnPreRenderComplete)—》保存ControlState(SaveControlState)—》保存ViewState(SaveViewState)—》呈现(Render)—》Page_UnLoad。

    • OnPreInit:在初始化页面OnInit事件前触发。在这个阶段里,可以进行定义站点主题(Theme)或加载站点个性化所需要的数据信息等操作。
    • OnInitComplete:完成初始化页面OnInit事件后触发。
    • OnPreLoad:在加载页面OnLoad事件前触发。
    • OnLoadComplete:完成页面加载OnLoad事件后触发。
    • OnPreRenderComplete:在完成预呈现OnPreRender事件后触发。这是完成页面呈现的最后一道关卡,在此之后,页面将无法再进行任何呈现上的改动。
    • SaveControlState:保存控件状态ControlState。ControlState是ASP.NET2.0控件新增的一个属性,类似ViewState作用,但它们区别在于ControlState用于保存更加重要的控件状态信息,以保证在禁用ViewState的情况下还可以对控件状态进行读写操作。
  2. 增加对页面Header的控制:
    System.Web.UI.Page类新增加了Header属性,用于对HTML页面头区域里数据的操作。通过对Header属性的跟踪,可以发现,Header属性保存着一个实现IPageHeader接口的对象(该对象有LinkedStyleSheets、Metadata、StyleSheet和Title四个属性),实际上正是通过这个对象实现对HTML页面头区域里数据的操作的。例如:
    <script runat=server>
    void Page_Load(object sender, System.EventArgs e)
    {
    this.Header.Metadata.Add(author, brooks);
    }
    </script>

    其运行结果为:
    <html>
    <head> <title>Untitled Page</title>
    <meta name=”author” content=”brooks” />
    </head>
  3. 定义表单中的默认按钮:
    在ASP.NET1.0中,我就为了设置表单中的默认按钮而一筹莫展。幸好ASP.NET2.0把这个功能补上了,现在可以非常方便的设置表单中的默认按钮了。
    <%@ page language=C# %>
    <script runat=”server”>
    void Button1_Click(object sender, System.EventArgs e)
    {
    this.LB_Message.Text = You clicked button1;
    }
    </script>
    <html>
    <head runat=”server”>
    <title>Untitled Page</title>
    </head>
    <body>
    <form runat=”server” defaultbutton=”Button1″>
    <asp:textbox id=”Textbox1″ runat=”server”></asp:textbox>
    <asp:button id=”Button1″ runat=”server” text=”Button” onclick=”Button1_Click” />
    <asp:label id=”LB_Message” runat=”server”></asp:label>
    </form>
    </body>
    </html>
  4. 设置焦点
    现在假设为TextBox1控件设置焦点,在ASP.NET 2.0中可以这样实现:
    this.Textbox1.Focus(); this.SetFocus(this.Textbox1); 即可为TextBox1控件设置焦点。
    如果打算也为表单设置个默认焦点控件,让光标默认停留在TextBox1上:
    <form runat=”server” defaultfocus=”TextBox1″>
  5. 跨页面数据发送
    如果你需要多个页面发送数据到同一个表单程序进行处理,或者数据在多个页面之间传输处理的话,你就可以使用ASP.NET 2.0这个新特性。例如,我打算把Default.aspx页里TextBox1里的文本数据发送到Default2.aspx页面进行处理:
    Default.aspx页:
    <%@ Page Language=C# %>
    <script runat=”server”>
    void Button2_Click(object sender, EventArgs e)
    {
    Label1.Text
    = Hi, + TextBox1.Text + . This is Default.aspx;
    }
    </script>

    <html xmlns=”http://www.w3.org/1999/xhtml” >
    <head runat=”server”>
    <title>Untitled Page</title>
    </head>
    <body>
    <form id=”form1″ runat=”server”>
    <asp:TextBox ID=”TextBox1″ Runat=”server”></asp:TextBox>
    <asp:Button ID=”Button1″ Runat=”server” Text=”PostToAnotherPage” PostBackUrl=”~/Default2.aspx” />
    <asp:Button ID=”Button2″ Runat=”server” Text=”PostToSelf” OnClick=”Button2_Click” />
    <br />
    <asp:Label ID=”Label1″ Runat=”server” Text=”Label”></asp:Label>
    </form>
    </body>
    </html>
    Default2.aspx页:
    <%@ Page Language=C# %>
    <script runat=”server”>
    void Page_Load(object sender, System.EventArgs e)
    {
    TextBox textBox1
    = (TextBox)PreviousPage.FindControl(TextBox1);
    this.Label1.Text = Hi, + textBox1.Text + . This is Default2.aspx!;
    }
    </script>
    <html xmlns=”http://www.w3.org/1999/xhtml” >
    <head runat=”server”>
    <title>Untitled Page</title>
    </head>
    <body>
    <form id=”form1″ runat=”server”>
    <asp:label id=”Label1″ runat=”server”></asp:label>
    </form>
    </body>
    </html>

(英文转载)最热门的HTML5教程

Most Wanted HTML 5 Tutorials

Posted by Jillz on January 18th, 2010

 

原文地址:http://smashingwebs.com/ p=217

 

 

We just got some fabulous CSS3 tutorials.. Now all you need is to have some HTML 5 Tutorials. HTML 5 is the most modern version of Html that you must learn. So here I have them for you guys.. :) I hope this will help you to understand more. Your comments are very essential for my improvement. So Kindly do comment here.

1. Create a simple web page layout with HTML 5!

2. HTML 5 Visual Cheat Sheet by Woork

3. Web Designers’ Browser Support Checklist

4. webOS HTML5 Database Storage Tutorial

5. HTML5 Doctor, helping you implement HTML5 today

6. Rounded corners on HTML 5 elements

7. Designing a Blog with HTML5

8. HTML 5 Cheat Sheet

9. Designing a Blog with HTML 5

10. Coding an HTML 5 Layout From Scratch

11. Preparing for HTML 5 with Semantic Class Names

12. HTML 5: Nav Ambiguity Resolved

13.  A Basic HTML 5 Tutorial To Show Simple Page Structure

14. HTML 5 Visual Cheat Sheet by Woork

15. HTML 5 Pocket Book

You can also suggest some nice HTML 5 tutorials if you have some. Lets make it large :)

 

Vs2010下asp.netmenu控件分隔图片显示问题

今天用Menu控件设计一个横向菜单,在设置分隔符图片时,发现显示不正常,图片跑到文字的下方。

  更奇怪的是,在另一个旧的项目里设计就是好的!

  没办法,仔细比较,最后终于发现,在旧项目的Web.config中有一句

<!–<br/ /><br/ />Code highlighting produced by Actipro CodeHighlighter (freeware)<br/ />http://www.CodeHighlighter.com/<br/ /><br/ />–><pagescontrolRenderingCompatibilityVersion=”3.5″>
</pages>

  MSDN的解释是”指定将与任何呈现的 HTML 兼容的 ASP.NET 版本。”。这才想起来,旧项目是从2008升级过来的,Visual Studio 自动将 Web.config 文件中的 controlRenderingCompatibilityVersion 特性设置为 3.5。

  如果以后大家也碰到控件显示的问题,试试这个方法吧。

asp.net母版页学习笔记

看来父亲对儿子永远是最了解的。看了Asp.net之父Scott的文章:Master Pages: Tips, Tricks, and Traps   后,我有一种豁然开朗的感觉——讲的透彻明白,讲的好啊——虽然只看了一半~~~

不过收获还是很多的

1.虽然叫母版页,英文名:MasterPage,给人感觉它就是内容内的老大,但实际上它只是内容页的一个子控件。

2.事件的触发顺序:除了Init()和Unload()之外的所有事件都是从最外面到最里面被激发的。

3.他部分的改变了页生命周期触发事件内所做的事情。如果没有用母版页,在PreInit事件内会生成所有控件,但如果引用了母版页,在Init事件内才生成控件及控件的引用,因为内容页中的所有控件都包含在“ContentPlaceholder”里,而“ContentPlaceholder”其实就是母版页的一个子控件。现在母版页被处理的过程就相当于内容页中的一个控件。虽然页的PreInit()是第一个被触发的事件,但是用户控件和母版页是没有这个事件的,所以在页的Page_PreInit()方法中,母版页和用户控件都不会被初始化,而是在Init()事件之后。正因为如此,所以所有在母版页或内容页内的赋值一律会记入ViewState(默认情况下)。

4.页面指令:MasterType  能很方便的实现对母版页的引用。

5.交互:对于母版页静态内容的引用,最好在母版页内做成属性,对于母版页内动态内容的引用,最好在母版页内做成事件。

 

以上是我看了将近一半后的心得,是翻译过来的,不过没有翻译完全。在网上找了找没有找到全部都翻译了的。过几天有了时间我自己来把剩下的部份翻译一下吧。

 

参考的文章:

Asp.net2.0页面的生命周期【转】

http://goldentune.iteye.com/blog/280337

母版页和工厂模式

http://www.cnblogs.com/lincats/archive/2008/04/09/1145626.html

Master Pages: Tips, Tricks, and Traps  

http://www.odetocode.com/Articles/450.aspx

ASP.NET 2.0 母版页提示、窍门和技巧      (上面的译文,只译了近一半)

http://www.cnblogs.com/lincats/archive/2008/04/12/1150720.html#1528369

ASP.NET-SubstitutionWeb服务器控件概述

您可以使用 Substitution 控件,在网页上创建可动态更新并可随后集成到缓存页中的区域。

一、方案

使用 Substitution 控件可以在要缓存输出的网页上指定要显示动态内容的部分。对于多数内容都要进行缓存的页,Substitution 控件提供了进行部分页缓存的简化的解决方案。您可以缓存整个页的输出,然后使用 Substitution 控件来指定页中不进行缓存的部分。缓存区域仅执行一次,且将一直从缓存读取,直至该缓存条目到期或被清除。动态区域则在每次请求页时都会执行。此缓存模型简化了其内容主要是静态内容的网页的代码,因为您不必在 Web 用户控件中对这些静态内容进行封装,以将它们放入缓存。例如,对于包含静态内容(如新闻故事)和显示广告的 AdRotator 控件的网页,此缓存模型就非常有用。新闻故事不会经常更改,这意味着可以将它们放入缓存。您可能会希望在用户每次请求该网页时显示一条新广告。AdRotator 控件直接支持缓存后替换,无论是否缓存了网页,它都会在网页每次回发时呈现一个新广告。

二、背景

缓存 ASP.NET 网页时,默认情况下,会缓存该网页的全部输出。在第一次请求时,该页将运行并缓存其输出。对于后续的请求,将通过缓存来完成,该页上的代码不会运行。

在某些情况下,您可能不但希望缓存 ASP.NET 网页,还希望在每次请求该网页时更新该网页上的选定部分。例如,您可能要缓存某页的很大一部分,但需要动态更新该页上的与时间高度相关的信息。

可以使用 Substitution 控件将动态内容插入到缓存页中。Substitution 控件不会呈现任何标记。因此,您需要将该控件绑定到网页或父级用户控件中的方法。您需要创建可返回要插入到网页中的信息的静态方法。由 Substitution 控件调用的方法必须符合下面的标准:

·必须为静态方法(在 Visual Basic 共享)。

·必须接受类型为 HttpContext 的参数。

·必须返回类型为 String 的值。

Substitution 控件无法访问网页上的其他控件,也就是说,您无法检查或更改其他控件的值。但代码却可使用传递给它的参数来访问当前网页的上下文。

在页运行时,Substitution 控件会调用该方法,然后用从该方法的返回值替换页上的 Substitution 控件。

代码示例

下面的示例演示如何使用 Substitution 控件在缓存页上创建可动态更新的内容。页的 Load 事件中的代码用当前时间来更新 Label 控件。因为页的缓存持续时间已设置为 60 秒,所以 Label 控件的文本不会更改,即使在 60 秒的时间内多次请求了该页。页上的 Substitution 控件调用静态方法 GetTime,该方法将以字符串的形式返回当前时间。每次刷新网页时,都会更新 Substitution 控件表示的值。

<%@ Page Language=”C#” %>

<%@ OutputCache Duration=60 VaryByParam=”None” %>

<script runat=”server”>

void Page_Load()

{

Label1.Text = DateTime.Now.ToString();

}

public static String GetTime(HttpContext context)

{

return DateTime.Now.ToString();

}

</script>

<html>

<head runat=”server”></head>

<body>

<form id=”form1″ runat=”server”>

<div>

<p>

<asp:Label runat=”server” ID=”Label1″ />

</p>

<p>

<asp:Substitution runat=”server”

ID=”Substitution1″

MethodName=”GetTime” />

</p>

<p>

<asp:Button runat=”server” ID=”Button1″ Text=”Submit”/>

</p>

</div>

</form>

</body>

</html>

三、Substitution

使用 Substitution 控件指定输出缓存网页上要以动态内容替换该控件的部分。Substitution 控件为要缓存大部分内容的页提供了一种缓存局部页的简化解决方案。可以对整页进行输出缓存,然后使用 Substitution 控件指定页中免于缓存的部分。需要缓存的区域只执行一次,然后从缓存读取,直至该缓存项到期或被清除。动态区域则在每次请求页时执行。由于不必对这些部分进行封装以缓存在 Web 用户控件中,因此,此缓存模型简化了主要是静态内容的页的代码。例如,如果页包含静态内容(如新闻报道)和显示广告的 AdRotator 控件,这种情况下,此缓存模型就很有用。新闻报道不会更改,这意味着它们可以缓存。但是,您希望在用户每次请求该页时都显示一条新广告。AdRotator 控件直接支持缓存后替换,无论页是否缓存,都在该页回发时呈现一个新广告。

说明: 在缓存页包含的用户控件中可以放置 Substitution 控件。但是,在输出缓存用户控件中不能放置 Substitution 控件。

Substitution 控件执行时,会调用一个返回字符串的方法。该方法返回的字符串即为要在页中的 Substitution 控件的位置上显示的内容。使用 MethodName 属性指定要在 Substitution 控件执行时调用的回调方法的名称。指定的回调方法必须是包含 Substitution 控件的页或用户控件的静态方法。回调方法的签名必须与接受 HttpContext 参数并返回字符串的 HttpResponseSubstitutionCallback 委托的签名匹配。

若要操作页的输出缓存,可使用 @ OutputCache 指令、HttpCachePolicy 类或 Cache 属性。

Substitution 控件的另一种使用方法是,使用 HttpResponseSubstitutionCallback 委托实现缓存替换行为。此外,还可以在直接支持缓存替换功能的控件(如 AdRotator 控件)上实现缓存替换行为。

示例

下面的代码示例演示如何以声明方式将 Substitution 控件添加到输出缓存网页。加载页面时,将在一个标签中向用户显示当前的日期和时间。页面中的此区域仅 60 秒便缓存和更新一次。当 Substitution 控件执行时,将调用 GetCurrentDateTime 方法。GetCurrentDateTime 返回的字符串将显示给用户。每次刷新页时,都不会缓存和更新页中的这一部分。

<%@ outputcache duration=”60″ varybyparam=”none” %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”

“http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>

<script runat=”server” language=”C#”>

void Page_Load(object sender, System.EventArgs e)

{

// Display the current date and time in the label.

// Output caching applies to this section of the page.

CachedDateLabel.Text = DateTime.Now.ToString();

}

// The Substitution control calls this method to retrieve

// the current date and time. This section of the page

// is exempt from output caching.

public static string GetCurrentDateTime (HttpContext context)

{

return DateTime.Now.ToString ();

}

</script>

<html >

<head runat=”server”>

<title>Substitution Class Example</title>

</head>

<body>

<form id=”form1″ runat=”server”>

<h3>Substitution Class Example</h3>

<p>This section of the page is not cached:</p>

<asp:substitution id=”Substitution1″

methodname=”GetCurrentDateTime”

runat=”Server”>

</asp:substitution>

<br />

<p>This section of the page is cached:</p>

<asp:label id=”CachedDateLabel”

runat=”Server”>

</asp:label>

<br /><br />

<asp:button id=”RefreshButton”

text=”Refresh Page”

runat=”Server”>

</asp:button>

</form>

</body>

</html>

jsp应用技巧

1. 如何让选中的一行记录高亮显示?
   http://topic.csdn.net/t/20050105/09/3699823.html
2. 如何在下拉列表框里选择一个值后跳出新窗口 
   http://topic.csdn.net/t/20050107/15/3707444.html
3. 如何在JSP中启动execl 
   http://community.csdn.net/Expert/TopicView1.asp id=4909154
   http://community.csdn.net/Expert/TopicView1.asp id=4685297
4. 两级联动菜单
   http://topic.csdn.net/t/20040730/16/3227437.html
5. java中如何把一个目录下的文件移到另一个指定的目录?
   http://topic.csdn.net/t/20050112/13/3719237.html
6. 如何制作表格线 
   http://community.csdn.net/Expert/TopicView1.asp id=5130862
7. jsp如判别一个字符在A到Z之间 
   http://topic.csdn.net/t/20050113/08/3721286.html
8. 得到一浮点数小数点后4位,如何写以函数截取为两位
   http://topic.csdn.net/t/20050117/14/3731712.html
9. 整型转字符 
   http://topic.csdn.net/t/20030526/22/1837632.html
10. 显示数据库的记录,点击哪个标题栏,就按照哪个标题排序
   http://topic.csdn.net/t/20041226/15/3677011.html
11. 制作两个按钮
    ??
12. 用什么sql语句将数据库中的一条记录,复制为两条 
   http://topic.csdn.net/t/20050120/17/3741746.html
13. 有兩個按鈕A,B,其中A按下去,A就不可以再按,另外B按下去,A可以再按..請問如何用javascript控制. 
   http://topic.csdn.net/t/20050120/17/3741568.html
14. 请问jsp中的数据库的连接方式
   http://topic.csdn.net/t/20030107/11/1334377.html
15. 在jsp中,怎么实现按回车就可提交表单 
   http://topic.csdn.net/t/20050121/11/3743133.html
16. 在JSP中如何传递数组 
   http://topic.csdn.net/t/20030624/17/1952227.html
17. 如何按地址取图片?
   http://community.csdn.net/Expert/TopicView1.asp id=4894525
   http://community.csdn.net/Expert/TopicView1.asp id=4990451
18. JSP中如何上传图片到数据库字段?
   http://community.csdn.net/Expert/TopicView1.asp id=4923127
19. 页面自动刷新?
   http://topic.csdn.net/t/20040430/16/3025697.html
20. 表单自动提交?
    http://community.csdn.net/Expert/TopicView1.asp id=4681334
21. 如何从JSP传数据的到JAVABEAN里 
   这个不就是参数传递么??
22. weblogic 数据池连接   数据源 JNDI名字  mysource
   http://topic.csdn.net/t/20040915/22/3376617.html
23. 三级联动菜单 
   http://blog.csdn.net/overmind/archive/2005/10/27/517856.aspx
24. 在JSP中如何调用浏览器中的”另存为”功能 
   http://topic.csdn.net/t/20050509/09/3990931.html
25. 网页全屏显示
    http://community.csdn.net/Expert/TopicView1.asp id=5057245
26. 求两个日期相隔了多少天:输入时间格式为(yyyy-mm-dd)
    http://topic.csdn.net/t/20050516/10/4009546.html
27. 上传文件对话框
    http://community.csdn.net/Expert/TopicView1.asp id=4961980
28. 分页测试
    http://community.csdn.net/Expert/TopicView1.asp id=4925123
29. 下载文件
    http://community.csdn.net/Expert/TopicView1.asp id=5019146
30. 简单汉字判断
   http://blog.csdn.net/duanxd/archive/2005/05/19/376481.aspx
31. 可否将JSP的变量或者bean传递给JAVASCRIPT使用?
   http://topic.csdn.net/t/20050520/14/4022667.html
32. 怎么把一种格式(如yyyy-mm-dd)的日期变量转换成另外一种格式(如dd-mm-yyyy)的日期变量!
   http://topic.csdn.net/t/20050602/21/4055209.html
33. 如何实现在页面上添加一行输入对话框
     
34. 如何制作验证码图片 
    http://community.csdn.net/Expert/TopicView1.asp id=4857455 
35. 图片缩小放大功能
   http://topic.csdn.net/t/20041227/09/3678138.html
36. 如何点击输入框弹出日期选择?
   http://community.csdn.net/Expert/TopicView1.asp id=5020494
   http://www.dynarch.com/projects/calendar/
37. 如何在图片上传前查看自己要上传的图片 
   http://community.csdn.net/Expert/TopicView1.asp id=4825282
38. 如何在图片排列的页面上选中一个图片,然后把它删掉 
   http://community.csdn.net/Expert/TopicView1.asp id=5162107
39. 显示某目录下的所有文件
   http://community.csdn.net/Expert/TopicView1.asp id=5056503
40. 如何把复选框中选中的值直接显示在输入文本框中?
    http://community.csdn.net/Expert/TopicView1.asp id=5004830
41. 如何选择路径下的文件直接显示文件内容 
    http://community.csdn.net/Expert/TopicView1.asp id=5194181
    http://community.csdn.net/Expert/TopicView1.asp id=5121413
42. 如何制作进度条 
    http://topic.csdn.net/t/20051120/03/4405364.html
43. 如何对较长字符省略显示 
    http://community.csdn.net/Expert/TopicView1.asp id=5124078
44. 如何制作日历 
    这个太多了
45. 点击文本弹出一个选择框,选中值后返回并显示
    http://community.csdn.net/Expert/TopicView1.asp id=4979197
    http://community.csdn.net/Expert/TopicView1.asp id=4988006
46. 如何关闭框架页面回到没框架的页面 
    http://community.csdn.net/Expert/TopicView1.asp id=4970057
47. 如何选中多条记录一次性删除 
    http://community.csdn.net/Expert/TopicView1.asp id=4762839
48. 如何自动获取页面文件名?
    http://community.csdn.net/Expert/TopicView1.asp id=4945500
49. 如何在JSP中调用ActiveX控件 
    http://community.csdn.net/Expert/TopicView1.asp id=4919689
50. 如何使用SmartUpload实现文件上传 
    http://community.csdn.net/Expert/TopicView1.asp id=4911791
51. 如何使用iReport和Jasperreport开发报表 
    http://community.csdn.net/Expert/TopicView1.asp id=5038328
52. 如何使用iText生成PDF?
    http://www.lowagie.com/iText/tutorial/ch07.html#htmlparsing
    http://java.ccidnet.com/art/3565/20050309/480327_1.html
53. 如何制作图片水印?
    http://community.csdn.net/Expert/TopicView1.asp id=5212770
    http://community.csdn.net/Expert/TopicView1.asp id=4885889
54. 如何在页面中屏蔽键盘功能键?
    http://community.csdn.net/Expert/TopicView1.asp id=4356360
55. 如何禁止用户复制网页内容?
    http://community.csdn.net/Expert/TopicView1.asp id=4356360
56. 如何实现不在地址拦中显示当前URL?
    http://community.csdn.net/Expert/TopicView1.asp id=4678351
    http://community.csdn.net/Expert/TopicView1.asp id=4863808
57. 如何获取用户的真实IP地址?
    http://community.csdn.net/Expert/TopicView1.asp id=4718686
58. 如何获取用户浏览器信息?
    http://community.csdn.net/Expert/TopicView1.asp id=4987045
    http://community.csdn.net/Expert/TopicView1.asp id=4898974
59. 如何获取当前绝对路径?
    http://community.csdn.net/Expert/TopicView1.asp id=5157921
    http://community.csdn.net/Expert/TopicView1.asp id=5178848
60. 如何将HTML文件转换成XML文件 
    http://community.csdn.net/Expert/TopicView1.asp id=4542984
61. 如何结合XML和XSL输出HTML页面?
    http://community.csdn.net/Expert/TopicView1.asp id=4355891
62. 如何制作动态树型菜单制作?
    http://www.blogjava.net/rickhunter/articles/59742.html
    http://community.csdn.net/Expert/TopicView1.asp id=4966014
63. 如何制作类似QQ的短消息提示?
    http://community.csdn.net/Expert/TopicView1.asp id=4702037
    http://community.csdn.net/Expert/TopicView1.asp id=5087584
64. 如何用jfreechat制作拄、饼、曲线图型 
    http://www.inspiresky.com/Article/ShowArticle.asp ArticleID=731
65. 文本框怎么只容许输入数字 
    http://community.csdn.net/Expert/TopicView1.asp id=4927727
66. 如何打开Word和Execl文件 
    http://community.csdn.net/Expert/TopicView1.asp id=5194181
    http://community.csdn.net/Expert/TopicView1.asp id=4685297
67. 如何生成Word 和 Excel文档?
    http://sourceforge.net/project/showfiles.php group_id=15255&release_id=167948
68. JSP如何读取Word内容 
    http://topic.csdn.net/t/20030217/13/1435281.html

html页面表格导出到excel总结

<script>function StorePage(){d=document;t=d.selection (d.selection.type!=’None’ d.selection.createRange().text:”):(d.getSelection d.getSelection():”);void(keyit=window.open(‘http://www.365key.com/storeit.aspx t=’+escape(d.title)+’&u=’+escape(d.location.href)+’&c=’+escape(t),’keyit’,’scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes’));keyit.focus();}</script>

最近一个项目需要把报表的表格导入excel,在网上找了一些方法,比较研究了一下,记在这里,备忘。

表格例子如下:

table id="tableExcel" width="100%" border="1" cellspacing="0" cellpadding="0">
    tr>
        td colspan="5" align="center">html 表格导出道Exceltd>
    tr>
    tr>
        td>列标题1td>
        td>列标题2td>
        td>类标题3td>
        td>列标题4td>
        td>列标题5td>
    tr>
    tr>
        td>aaatd>
        td>bbbtd>
        td>ccctd>
        td>dddtd>
        td>eeetd>
    tr>
    tr>
        td>AAAtd>
        td>BBBtd>
        td>CCCtd>
        td>DDDtd>
        td>EEEtd>
    tr>
    tr>
        td>FFFtd>
        td>GGGtd>
        td>HHHtd>
        td>IIItd>
        td>JJJtd>
   tr>
table>

1、js的方法

A、将整个表格拷贝到EXCEL中

function method1(tableid) {

    var curTbl = document.getElementById(tableid);
    var oXL = new ActiveXObject("Excel.Application");
    var oWB = oXL.Workbooks.Add();
    var oSheet = oWB.ActiveSheet;
    var sel = document.body.createTextRange();
    sel.moveToElementText(curTbl);
    sel.select();
    sel.execCommand("Copy");
    oSheet.Paste();
    oXL.Visible = true;

}

B、读取表格中每个单元到EXCEL中:

function method2(tableid)
{

    var curTbl = document.getElementById(tableid);
    var oXL = new ActiveXObject("Excel.Application");
    var oWB = oXL.Workbooks.Add();
    var oSheet = oWB.ActiveSheet;
    var Lenr = curTbl.rows.length;
    for (i = 0; i 


        var Lenc = curTbl.rows(i).cells.length;
        for (j = 0; j value = curTbl.rows(i).cells(j).innerText;

        }

    }
    oXL.Visible = true;
}

c、把表格输出到另一个页面,然后存成cvs格式

function getXlsFromTbl(inTblId, inWindow)

{

    try {
        var allStr = "";
        var curStr = "";
        if (inTblId != null && inTblId != "" && inTblId != "null") {

            curStr = getTblData(inTblId, inWindow);

        }
        if (curStr != null) {
            allStr += curStr;
        }

        else {

            alert("你要导出的表不存在");
            return;
        }
        var fileName = getExcelFileName();
        doFileExport(fileName, allStr);

    }

    catch(e) {

        alert("导出发生异常:" + e.name + "->" + e.description + "!");

    }

}

function getTblData(inTbl, inWindow) {

    var rows = 0;
    var tblDocument = document;
    if (!!inWindow && inWindow != "") {

        if (!document.all(inWindow)) {
            return null;
        }

        else {
            tblDocument = eval(inWindow).document;
        }

    }

    var curTbl = tblDocument.getElementById(inTbl);
    var outStr = "";
    if (curTbl != null) {
        for (var j = 0; j length; j++) {
            for (var i = 0; i length; i++) {

                if (i == 0 && rows > 0) {
                    outStr += " \t";
                    rows -= 1;
                }

                outStr += curTbl.rows[j].cells[i].innerText + "\t";
                if (curTbl.rows[j].cells[i].colSpan > 1) {
                    for (var k = 0; k  \t";
                    }
                }
                if (i == 0) {
                    if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) {
                        rows = curTbl.rows[j].cells[i].rowSpan - 1;
                    }
                }
            }
            outStr += "\r\n";
        }
    }

    else {
        outStr = null;
        alert(inTbl + "不存在 !");
    }
    return outStr;
}

function getExcelFileName() {
    var d = new Date();
    var curYear = d.getYear();
    var curMonth = "" + (d.getMonth() + 1);
    var curDate = "" + d.getDate();
    var curHour = "" + d.getHours();
    var curMinute = "" + d.getMinutes();
    var curSecond = "" + d.getSeconds();
    if (curMonth.length == 1) {
        curMonth = "0" + curMonth;
    }

    if (curDate.length == 1) {
        curDate = "0" + curDate;
    }

    if (curHour.length == 1) {
        curHour = "0" + curHour;
    }

    if (curMinute.length == 1) {
        curMinute = "0" + curMinute;
    }

    if (curSecond.length == 1) {
        curSecond = "0" + curSecond;
    }
    var fileName = "table" + "_" + curYear + curMonth + curDate + "_"
            + curHour + curMinute + curSecond + ".csv";
    return fileName;

}

function doFileExport(inName, inStr) {
    var xlsWin = null;
    if (!!document.all("glbHideFrm")) {
        xlsWin = glbHideFrm;
    }
    else {
        var width = 6;
        var height = 4;
       var openPara = "left=" + (window.screen.width / 2 - width / 2)
                + ",top=" + (window.screen.height / 2 - height / 2)
                + ",scrollbars=no,width=" + width + ",height=" + height;
        xlsWin = window.open("", "_blank", openPara);
    }
    xlsWin.document.write(inStr);
    xlsWin.document.close();
    xlsWin.document.execCommand('Saveas', true, inName);
    xlsWin.close();

}

总结:比较上面3种方法,感觉第一种方法比较完美一些,因为这种方法比较完整的输出表格的格式。但,第一和第二种方法都用了ActiveX 对象,对客户端的安全有要求,而且最大的问题还有一个,就是excel 对象无法关闭。第3中方法虽然没有用ActiveX 对象,但是用了弹出窗口输出, 如果禁止了弹出窗口则无法使用。

对于execl 对象无法关闭的问题,下面的方法是一个权宜方法:

function Cleanup() {
    window.clearInterval(idTmr);
    CollectGarbage();
  }

调用方法:

idTmr = window.setInterval("Cleanup();",1);

2、Asp.net(c#)中的方法

这种方法其实类似上面的js的第3中方法(也可以在其他的web脚本来实现,比如asp中vbscript,或者php),把表格用文件流的方式

输出为excel。实例代码如下:

public void OutPutExcel(string title)
    {

        Response.Clear();
        Response.Buffer = true;
        Response.Charset = "utf-8";

        Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(title + ".xls"));
        Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");

        Response.ContentType = "application/ms-excel";
        Page.EnableViewState = false;

        System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);

        this.Page.RenderControl(oHtmlTextWriter);

        string temp = oStringWriter.ToString();

        Response.Write(temp);
        Response.End();
    }

这种方法的从本质上说并非标准的excel格式,不过把html格式的文件另存为excel的格式,然后用excel打开罢了。

3、利用ExceL Application或者MSOWC 或者ado.net

这种方法都是利用服务器的组件来时实现,要求服务端要安装excel,具体的代码可以看下面的链接:

http://www.cnblogs.com/pucumt/archive/2006/09/13/503120.html

http://support.microsoft.com/default.aspx scid=kb;zh-cn;306023#top

我不提倡用这种方法,因为需要占用服务器的资源。

本文首发地址:http://www.watch-life.net/programming-notes/html-table-2-excel.html
更多文章见:守望轩[http://www.watch-life.net]

html5全接触(二)–BounceBall小游戏简易教程

最近一段时间都比较忙,好久没更新博客了,遵循着“时间就像那啥,挤挤总会有的”的原则,承接着上一篇html5先关的博文,继续我们的趣味html5之旅。

前一段时间很流行用html5写小游戏,当了解了一些常用的api之后,你会发现,写一些简单的小游戏自娱自乐也不会那么困难,当然,做逻辑和界面复杂的游戏除外。以下会提供一个弹球小游戏的简单教程,希望感兴趣的朋友能在编码中找到一点乐趣。

<!– 注:以下demo木有神马高深的东东,大牛们觉得无味请略过。同时,由于砖块厚度与弹球的纵向变换单元的比例不协调,故没做砖块的侧向碰撞监测.. –> 

<!DOCTYPE html>
<html>
<head>
<style>
body {margin:0; position:absolute; width:100%; height:100%}
canvas {display: block; margin: 20px auto; border: 2px solid #333}
.info {width: 600px; margin: 0 auto; color: #666; text-align:center}
</style>
<script>
var Bombule = function () {
var ctx, x = 295, y = 385, dx = 2, dy = 4, W, H, rd = false, ld = false, pause = true, X, B = {},
rowColor = ["#FF1C0A", "#FFFD0A", "#00A308", "#0008DB", "#EB0093", "#00A308", "#0008DB", "#EB0093"];
var init = function (id) {
var canvas = document.getElementById(id);
W = canvas.width || 600;
H = canvas.height || 400;
X = (W-100)/2;
ctx = canvas.getContext('2d');
this.initBricks(8, 8);
this.run();
this.evListen();
}
init.prototype = {
run : function () {
var _this = this;
this.st = setInterval(function () {
_this.draw();
}, 16)
},
draw : function () {
this.clear();
this.circle(x, y, 8);
if (rd && !pause && X < W-this.paddleW) {X += 10} else if (ld && !pause && X > 0) {X -= 10}
this.paddle(X, 100);
this.drawBricks();
this.hitBrick(x, y);
if (x + dx > W || x + dx < 0) dx = -dx;
if (y + dy < 0) {dy = -dy} 
else if (y + dy > H-10) {
x > X-4 && x < X+this.paddleW+4   this.hitPaddle(x) : this.stop();
}
if (!pause) {
x += dx;
y += dy;
}
},
clear : function () {
ctx.clearRect(0, 0, W, H);
},
circle : function (x, y, r) {
ctx.beginPath();
ctx.arc(x, y, r, 0, Math.PI*2, true);
ctx.closePath();
ctx.fill();
},
rect : function (x, y, w, h) {
ctx.beginPath();
ctx.rect(x, y, w, h);
ctx.closePath();
ctx.fill();
},
stop : function () {
clearInterval(this.st);
this.showInfo('Game Over')
},
paddle : function (l, w) {
this.paddleW = w;
this.rect(l, H-10, w, 10);
},
evListen : function () {
document.addEventListener('keydown', function (e) {
if (e.keyCode == 39) rd = true;
else if (e.keyCode == 37) ld = true;
}, false);
document.addEventListener('keyup', function (e) {
if (e.keyCode == 39) rd = false;
else if (e.keyCode == 37) ld = false;
else if (e.keyCode == 32) pause  = !pause   true : false;
}, false);
},
initBricks : function (row, col) {
B.row = row;
B.col = col;
B.w = W/col - 1;
B.h = 15;
B.pad = 1;
B.bricks = new Array(row);
for (var i=0; i<row; i++) {
B.bricks[i] = new Array(col);
for (var j=0; j<col; j++) {
B.bricks[i][j] = 1;
}
}
},
drawBricks : function () {
for (var i=0; i<B.row; i++) {
ctx.fillStyle = rowColor[i];
for (var j=0; j<B.col; j++) {
B.bricks[i][j] === 1 && this.rect(j*(B.w+B.pad) + B.pad, i*(B.h+B.pad)+B.pad, B.w, B.h);
}
}
},
hitBrick : function (x, y) {
var rh = B.h + B.pad,
cw = B.w + B.pad,
row = Math.floor(y/rh),
col = Math.floor(x/cw);
if (y < B.row*rh && row >= 0 && col >= 0 && B.bricks[row][col] === 1) {
dy = -dy;
B.bricks[row][col] = 0;
}
},
hitPaddle : function (x) {
dy = -dy;
dx = 10 * ((x-(X+this.paddleW/2))/this.paddleW);
},
showInfo : function (text) {
ctx.font = '60pt Calibri';
ctx.fillStyle = '#999';
ctx.fillText(text, 130, 200);
}
}
return init;
}();
onload = function () {
new Bombule('canvas');
}
</script>
</head>
<body>
<canvas id="canvas" width="600" height="400">Your Broswer don't support html5 canvas</canvas>
<p class="info">空格-开始/暂停 | 方向键控制挡板左右</p>
<!--<audio src="http://www.w3schools.com/html5/horse.ogg" autoplay="true">
Your browser does not support the audio element.
</audio>-->
</body>
</html>

 <!DOCTYPE html>

<html>
<head>
<style>
body {margin:0; position:absolute; width:100%; height:100%}
canvas {display: block; margin: 20px auto; border: 2px solid #333}
</style>
  <script>
var init = function () {
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d');
ctx.beginPath();
ctx.arc(200, 200, 8, 0, Math.PI*2, true);
ctx.closePath();
ctx.fill();
}
onload = init;
</script></head>
<body>
<canvas id="canvas" width="600" height="400">Your Broswer don't support html5 canvas<canvas>
</body>
</html>

 

roading谈自己写组件的过程

从写下决定开发自己的组件(

http://roading.net/blog/article.asp id=47

)已经快一个月了,一直有很多琐碎的事情,到目前还没有写完计划写的组件,怕自己写不下去,到这里说几句,算是对自己的监督.

———————————————————————————————————————

既然写一套组件,那么首先要考虑的就是组件的基类的定义问题,然后组件的规划和构建,再然后组件所面向的使用群,组件怎么使用以及组件的执行效率…等等..反正很多的事情都要考虑到的,不象写单个的组件那么随意…

一 . 考虑组件基类定义其实也是考虑组件怎么使用的问题,目前大多的组件是从object或者自己定义的类继承的,这样就注定组件的使用要靠代码来定义了,虽然这样考虑到效率比较好,但我不喜欢这样的组件,如果对组件没有很多的了解,使用起来就很不方便,所以经过几天的考虑还是决定跟随mm从MovieClip继承,这样做可以有一下的好处:

1.为组件定制参数,方便组件参数的定义

2.任意位置的摆放,方便布局

3.任意大小的缩放,方便布局

4.可以很好的在时间轴上使用组件

5…………………….

暂时先想到这么多,当然也有很多不利的方面,这里就不说了…..

二 . 组件的另外一个严重的问题就是使用者不能方面的对组件的样式定义,所以我决定不写绘图类,不去自己绘制组件的界面,而是为每个组件设置skin参数,方便的定制每个组件的样式.

三 . 说是要写一套简单的组件,并且以简单为主,可是在写的过程中还是想到的功能都写加上,以至于自己都决定有点乱了,为组件增加Tooltip功能,鼠标滚轮侦听功能,按键的响应侦听功能………还多东西都想写进去,这就象对自己的孩子一样,有些知识觉得明明不实用,可是还想让他去这也学那也学…

四 . 不说那么多了,贴出一个截图……………



本文转自:http://www.5uflash.com/flashjiaocheng/Flashzujianxuexi/1343.html