javascript技巧

转自:http://topic.csdn.net/u/20080527/10/7f580777-1a3d-44fc-8806-55f9d79d0c65.html

 

(一).确认删除用法:
  1. BtnDel.Attributes.Add(“onclick”,”return confirm(‘”+”确认删除 “+”‘)”);
  2. linktempDelete.Attributes[“onclick”]=”javascript:return  confirm(‘”+”确认删除 “+”‘);”;
  3. private void grdProject_ItemDataBound(object sender, DataGridItemEventArgs e)
  4.
  {
if ((e.Item.ItemType == ListItemType.Item) | (e.Item.ItemType == ListItemType.AlternatingItem))
{
  // 刪除按鈕上的提示部分
  e.Item.Cells[10].Attributes.Add(“onclick”, “return confirm(‘确定删除吗?’);”);

  }
  5.
    <script language=”JavaScript” type=”text/JavaScript”>
function delete_y(e)
        {
    if(event.srcElement.outerText == “删除”)
        event.returnValue=confirm(“确定删除 “);
}
document.onclick=delete_y;
    </script>

(二).跨语言字符串替换
    System.Text.RegularExpressions.Regex.Replace(str1,@” <{1}[^ <>]*>{1}”,””).Replace(“&nbsp;”,””).Replace(“&#092;”,”\\”).Replace(“&#045;”,”-“).Replace(“&amp;”,”&”).Replace(“&lt;”,” <“).Replace(“&gt;”,”>”).Replace(“br”,”\n”);

(三).关闭窗体
  1.
      this.btnClose.Attributes.Add(“onclick”,  “window.close();return false;”);
  2.关闭本窗体间跳转到另一个页面
      this.HyperLink1.NavigateUrl = “javascript:onclick=window.opener.location.assign
        (‘” + “index.aspx”+ ” &Func=Edit&AutoID=” + intAutoid + ‘);window.close();”;
  3.关闭父窗体:
      <INPUT type=”reset” value=’ <%=this._Cancel%>’ onclick=”window.parent.close()”  Class=”Button”>

  4.关闭本弹出窗体,并刷新父页面

      this.Response.Write(” <script language=’javascript’>window.opener.location.reload();window.close(); </script>”);

(四).Web MessageBox 
  1.
      Response.Write(” <script language=javascript> window.alert(‘保存成功1’); </script>”);
  2.
      Response.Write(” <script>alert(‘”+”保存成功!”+”‘); </script>”);
  3.
      this.Page.RegisterStartupScript(“ChiName”,” <script language=’javascript’>alert(‘” + “保存成功!” + “‘) </script>”);

(五).DataGrid中加CheckBox控件模板列.
  请看:  http://blog.csdn.net/chengking/archive/2005/10/08/497520.aspx

(六). window.open() 方法
语法:window.open(pageurl,name,parameters);
window对象的open()方法用于创建一个新的窗口实例,新创建的窗口的外观由参数:parameters指定。新窗口中打开的文档由参数:        pageurl指定。系统能够根据参数:name确定的名称访问该窗口。

        下表为parameters参数表:
        参数          衩始值          说明
        alwaysLowered yes/no 指定窗口隐藏在所有窗口之下。
        alwaysRaised yes/no 指定窗口浮在所有窗口之上。
        dependent yes/no 指定打开的窗口为父窗口的一个了窗口。并随父窗口的关闭而关闭。
        directions yes/no 指定Navigator 2和3的目录栏是否在新窗口中可见。
        height pixel value 设定新窗口的像素高度。
        hotkeys yes/no 在没有菜单栏的新窗口设置安全退出热键。
        innerHeight pixel value 设置新窗口中文档的像素高度。
        innerWidth pixel value 设置新窗口中文档的像素宽度。
        location yes/ no 指明位置栏在新窗口中是否可见。
        menubar yes /no 指明菜单栏在新窗口中是否可见。
        outerHeight pixel value 设定窗口(包括装饰边框)的像素高度。
        outerWidth pixel value 设定窗口(包括装饰边框)的像素宽度。
        resizable yes /no 指明新窗口是否可以调整。
        screenX pixel value 设定新窗口离屏幕边界的像素长度。
        screenY pixel value 设定新窗口离屏幕上边界的像素长度。
        scrollbars yes /no 指明滚动栏在新窗口中是否可见。
        titlebar yes /no 指明菜单题目栏在新窗口是否可见。
        toolbar yes /no 指明工具栏在新窗口中是否可见。
        Width pixel value 设定窗口的像素宽度。
        z-look yes /no 在文档中包含各个 <pplet>标签的数组。
        fullscreen yes / no 打开的窗体是否进行全屏显示
        left pixel value 设定新窗口距屏幕左方的距离
        top pixel value 设定新窗口距屏幕上方的距离
 
      例子:
        <html>
          <head>
              <title>window.open函数 </title>
          </head>
          <body>
              <script language=”javascript”>
                  <!–
                window.open(“”,”name1″,”width=100,height=200,toolbar=no,scrollbars=no,menubar=no,screenX=100,screenY=100″);
                    //–>
              </script>
          </body>
        </html>

(七).location对象   
    href 整个URL字符串.
    protocol 含有URL第一部分的字符串,如http:
    host 包含有URL中主机名:端口号部分的字符串.如//www.cenpok.net/server/
    hostname 包含URL中主机名的字符串.如http://www.cenpok.net
    port 包含URL中可能存在的端口号字符串.
    pathname URL中”/”以后的部分.如~list/index.htm
    hash “#”号(CGI参数)之后的字符串.
    search ” “号(CGI参数)之后的字符串.

(八).按键捕捉
  1.Ctrl+Enter按键捕捉方法
    <body onkeydown=”doKeyDown()”>
    <script language=”JavaScript”>
    <!–
    function doKeyDown()
    {
        if (event.ctrlKey && event.keyCode == 13)
        {
          alert(“You pressed the Ctrl + Enter”)
        }
    }
    //–>
    </script>
    </body>
  2.Alt加快捷键: Alt+A
    <button accessKey=A title=”Alt+A” onclick=”alert(‘Button clicked!’)”>Alt+A </button>
(九).控制输入,非法字符不能输入到TextBox.
    <asp:textbox class=”Text”
        onkeypress=”if (event.keyCode < 48 || event.keyCode >57) event.returnValue = false;”
id=”txtY_Revenue” style=”TEXT-ALIGN: right” runat=”server” Width=”90%” MaxLength=”12″>
    </asp:textbox>
    说明: 此方法控制TextBox只收数字:0~9 , 也自可以定义其它可输入字符,如改成: 65~123,只允许输入: a~z和A~Z 等.

[以下为收藏]

1>屏蔽功能类

1.1 屏蔽键盘所有键
<script language=”javascript”>
<!–
function document.onkeydown(){
  event.keyCode = 0;
  event.returnvalue = false;
}
–>
</script>

1.2 屏蔽鼠标右键

在body标签里加上oncontextmenu=self.event.returnvalue=false

或者

<script language=”javascript”>
<!–
function document.oncontextmenu()
{
  return false;
}
–>
</script>

function nocontextmenu()
{
    if(document.all) {
        event.cancelBubble=true;
        event.returnvalue=false;
        return false;
    }
}

或者

<body onmousedown=”rclick()” oncontextmenu= “nocontextmenu()”>

<script language=”javascript”>
<!–
function rclick()
{
    if(document.all) {
        if (event.button == 2){
            event.returnvalue=false;
        }
    }
}
–>
</script>

1.3 屏蔽 Ctrl+N、Shift+F10、F5刷新、退格键

<script language=”javascript”>
<!–
  //屏蔽鼠标右键、Ctrl+N、Shift+F10、F5刷新、退格键
function window.onhelp(){return false} //屏蔽F1帮助
//function KeyDown(){ 注:本文为引用,应用时发现此句无法实现,经调试采用下面语句代替,如此句可以应用请知道的人指点下,谢谢

function document.onkeydown() {
  if ((window.event.altKey)&&
      ((window.event.keyCode==37)||  //屏蔽 Alt+ 方向键 ←
      (window.event.keyCode==39))){  //屏蔽 Alt+ 方向键 →
    alert(“不准你使用ALT+方向键前进或后退网页!”);
    event.returnvalue=false;
    }

    /* 注:这还不是真正地屏蔽 Alt+ 方向键,
    因为 Alt+ 方向键弹出警告框时,按住 Alt 键不放,
    用鼠标点掉警告框,这种屏蔽方法就失效了。以后若
    有哪位高手有真正屏蔽 Alt 键的方法,请告知。*/

  if ((event.keyCode == 8) &&
      (event.srcElement.type != “text” &&
      event.srcElement.type != “textarea” &&
      event.srcElement.type != “password”) ||          //屏蔽退格删除键 
      (event.keyCode==116)||                            //屏蔽 F5 刷新键
      (event.ctrlKey && event.keyCode==82)){            //Ctrl + R
    event.keyCode=0;
    event.returnvalue=false;
    }
  if ((event.ctrlKey)&&(event.keyCode==78))  //屏蔽 Ctrl+n
    event.returnvalue=false;
  if ((event.shiftKey)&&(event.keyCode==121)) //屏蔽 shift+F10
    event.returnvalue=false;
  if (window.event.srcElement.tagName == “A” && window.event.shiftKey)
      window.event.returnvalue = false;  //屏蔽 shift 加鼠标左键新开一网页
  if ((window.event.altKey)&&(window.event.keyCode==115)){ //屏蔽Alt+F4
      window.showModelessDialog(“about:blank”,””,”dialogWidth:1px;dialogheight:1px”);
      return false;}
  }
/* 另外可以用 window.open 的方法屏蔽 IE 的所有菜单
第一种方法:
  window.open(“你的.htm”, “”,”toolbar=no,location=no,directories=no,menubar=no,scrollbars=no,resizable=yes,status=no,top=0,left=0″)
第二种方法是打开一个全屏的页面:
  window.open(“你的.asp”, “”, “fullscreen=yes”)
*/
//–>
</script>

如何实现Asp与Asp.Net共享Session

微软.net中,session的存储机制已经与asp的存储机制不一样,虽然可以在同一个iis下同时运行asp与aspx,但是它们之间不能传递session。
之前大批系统应用到了asp,在升级过程中,如果完全抛弃asp来重写,一来工作量太大,二来以前的成果不能保存下来。

所以微软提出了一个session共享的解决方案,只是此文档光说明原理,并没有说具体的操作步骤,由此,我撰文描述过程。

简单说明原理,asp与asp.net之间的session统一存储在数据库中来实现共享

1、创建数据表
打开sql server查询分析器,运行以下脚本来创建数据表,数据表名为sessionstate
if exists (select * from sysobjects where id = object_id(n'[dbo].[sessionstate]’) and objectproperty(id, n’isusertable’) = 1)
drop table [dbo].[sessionstate]
go

create table [dbo].[sessionstate] (
[id] uniqueidentifier not null ,
[data] [image] not null ,
[last_accessed] [datetime] not null
) on [primary] textimage_on [primary]
go

alter table [dbo].[sessionstate] with nocheck add
constraint [pk_sessionstate] primary key nonclustered
(
[id]
) on [primary]
go

2、下载以下文件 session.rar

将文件解压后,将产生4个文件,分别作如下操作。
复制 global.asa 到系统根目录下,并打开文件,修改application(“sessiondsn”) 为合适的数据库链接字符串,如果系统本身已经有了global.asa,则在此文件中添加如下application:
application(“sessiondsn”) = “initial catalog=sqlservername;persist security info=false;user id=sa;password=****;packet size=4096”
在系统的 web.config 文件中,添加此项
<add key=”sessiondsn” value=”data source=sqlservername;initial catalog=sessiondemodb;persist security info=false;user id=sessiondemodbuser;password=****;packet size=4096″ />
并将其值修改为合适的数据库链接。
将另外两个dll文件复制到系统目录下(或其他合适目录)

3、关闭iis中asp的session选项
打开iis,选择站点,依次选择属性 -> 主目录 -> 配置 -> 应用程序选项,将启用会话状况前的复选勾去除。如下图:
screen.width-350)this.width=screen.width-350″ border=0>

4、安装sessionutility.dll
首先找到 gacutil.exe 文件,一般情况下在 microsoft visual studio .net 2003\sdk\v1.1\bin 目录下
在命令提示符窗口中,执行 gacutil /i sessionutility.dll,(如果执行失败,请将这两个文件的路径都写全了)

5、注册sessionutility.dll为com对象
同样,要找到 regasm.exe 文件,一般情况下在 winnt\microsoft.net\framework\v1.1.4322 目录下
在命令提示符窗口中,执行 regasm.exe sessionutility.dll /tlb:sessionutility.tlb,(如果执行失败,请将这两个文件的路径都写全了)
这样就会产生出一个tlb文件,可当做普通的com组件来调用。

6、注册sessionmanager.dll
这个很简单了,在命令提示符窗口中,执行regsvr32 sessionmanager.dll

7、如果是ntfs格式的系统,请找到 sessionmgr.dll,右键点击,属性,将iusr_<machine_name>权限设置为可读和可执行。

至此,我们已经可以实现了asp与asp.net之间session共享了,那么怎么去用

在asp中,我们要如下使用:
页面开始端
dim session
set session = server.createobject(“sessionmgr.session2”)
session(“userid”) = …



页面结束端
set session = nothing ‘记得一定要释放哦

而在asp.net中,我们要如下使用:
首先,我们要添加对sessionutility的引用
然后,编码时,原来是这样的继承 public class webform1 : system.web.ui.page,修改为public class webform1 : msdn.sessionpage
这样在编码过程中就可以使用session(“userid”)这样的形式了。

注意:虽然session实现了共享,但是session的使用语法,相对于.net中新增的部分,就没有实现,毕竟要照顾asp
譬如session.remove,就不能用了。

 

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>

.NETVsJava

总的来说,

.NET 可以看成是正规军

四平八稳,应有尽有,手到擒来

Java 可以看成是游击队

短小精悍,灵活自如,剑走偏锋

从几个角度来看吧

1、学习曲线

任何能力都是习得的,从玩单板、下厨房到开发软件项目。

rookie -> master, 这是我们在做任何事的时候,首先考虑的问题。

Frankly speak, 微软在这方面好的有些让人义愤填膺。

MSDN + 在线视频 + 多如牛毛的教材 + 偏向于新手的界面设计

刚上手时,一不小心买错了,想看 ASP.NET  的 C# 开发,买到了 VB.NET 开发 Framework 1.1 上 WinForm 的资料

没关系,照样看,而且这些经验在以后的开发过程中都用的到

EQ > 80 , IQ > 40, age > 10 你可以轻松入门做 .NET 的程序员了

Java 的学习曲线几乎是90度的

也就是说,要有足够的心理承受能力,面对自己是一个完全菜鸟的境地

能买到的书,大部分都只讲某一特定方面,比如 Java语法、java 编程思想、JSP、JSF…

几乎很难找到一本拿着就可以照做出一套商业系统的教材

有些类似《xxx 入门指南》《xxx 第一步》的书

里面用的构架、开发工具几乎都是过时的,或者和你的团队不在一个战壕里

自己想埋头一个人搞出一套来,几乎不可能(有这样的,我知道,但>95%的概率你不是这类人)

学习的最佳途径是什么?

拜师学艺!

找一个比较浅显易懂的项目,跟着师傅一起做

从 java环境、开发工具、调试技巧、ORM、各类框架、发布和维护

整个生命周期如果你打算自己一个人拿下,从成本上看是不值得的

先不要考虑什么都明白,能搞明白那一样都是很开心的事儿

在充分信赖别人的工作成果的基础上,看自己能做什么,这是菜鸟正确的学习态度



2、开发社区


不知道是自己没有摸着门道还是英文功底太差

IMHO:

.NET 社区的氛围比 Java 的开发社区氛围要“Simple”很多

.NET 社区里,如果你有个棘手的问题,提出来。能解决的很快就有人凑上来说,仔细搜索一下,大部分的人都已经遇到你提出的问题。解决不了的你也就不用太指望了,也许M$会在下一个版本中修复的。现在,绕行。

.NET 社区,散发着实用主义精神的光芒,是地地道道的“项目加速器”。

Java 社区里,你提出一个问题,有人说是你的选择的框架错了,有人告诉你是设计模式的问题,有人提供一段不知道需要依赖那些 jar包的程序,有人告诉你这个问题的本质是什么,有人在半年之后轻松搞定了问题然后被无数的网站转载之。反正到时候你已经早早把这个问题放在脑后,或者深埋在系统里让你的后人痛苦万分只能重构。

Java 社区,是江湖,是规矩太多到没有规矩,满口的专业术语和单词缩写构成的迷宫,为了让你看明白答案,URL也许会将你带回问题。

我们都知道,这个世界其实没这么简单。可惜,谁喜欢别人将复杂性一股脑塞在自己的面前?

装牛X容易,难的是用简单可靠的方式解决问题。

3、框架

.NET 里面,也有框架,还没得选,你跟着M$一路跑下去

Basic、MS C、C++、Foxbase、FoxPro、VisualFoxPro、VisualBasic、Framework 1.0、1.1、2.0 …(听说3.5已经出来了)

你说这些不是框架,Enterprise Library、AJAX.NET 总算了吧?

区区不才这些还都玩过,一个字,好用。

你照着例子5分钟内上手,半天内你就有所小成

但想成为大师,你需要微软的内部资料

Java 的世界,框架都是用“横空出世”“才华满溢”“独步武林”“一统天下”这些形容词的

反正一年之后,你也不确定到底大家还都用啥,也许你已经成为这个构架的领军人物赚了千万美金,也许这个开源构架已经宣布停止更新或者和别人合并

Log4J, Dom4J, Spring, Hibernate, JPA, JSP, JSF, Struts, Seam, EJB3 …

我们象勤奋的水獭,用快速的筛选、抽象、吸收、进化能力,抵御着短视、反复无常、变态夸张的需求如潮水般蔓延,求得一隅生存之地

 

Asp.Net文件和文件夹操作大全

创建文件夹

/// <summary>
        /// 创建文件夹
        /// </summary>
        /// <param name="Path"></param>
        public static void FolderCreate(string Path)
        {
            // 判断目标目录是否存在如果不存在则新建之
            if (!Directory.Exists(Path))
                Directory.CreateDirectory(Path);
        }

创建目录

 #region 创建目录
        public static void FileCreate(string Path)
        { 
            FileInfo CreateFile = new FileInfo(Path); //创建文件 
            if (!CreateFile.Exists) 
            { 
                FileStream FS = CreateFile.Create(); 
                FS.Close(); 
            } 
        } 
        #endregion

 递归删除文件夹目录及文件

 #region 递归删除文件夹目录及文件
        /****************************************
         * 函数名称:DeleteFolder 
         * 功能说明:递归删除文件夹目录及文件 
         * 参    数:dir:文件夹路径 
         * 调用示列: 
         *           string dir = Server.MapPath( "test/"); 
         *           EC.FileObj.DeleteFolder(dir);       
        *****************************************/ 
        /// <summary>
        /// 递归删除文件夹目录及文件 
        /// </summary>
        /// <param name="dir"></param> 
        /// <returns></returns>
        public static void DeleteFolder(string dir) 
        { 
            if (Directory.Exists(dir)) //如果存在这个文件夹删除之 
            { 
                foreach (string d in Directory.GetFileSystemEntries(dir)) 
                { 
                    if (File.Exists(d)) 
                        File.Delete(d); //直接删除其中的文件                        
                    else 
                        DeleteFolder(d); //递归删除子文件夹 
                } 
                Directory.Delete(dir, true); //删除已空文件夹                 
            } 
        }

        #endregion

 将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。

  #region 将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。
        /****************************************
         * 函数名称:CopyDir 
         * 功能说明:将指定文件夹下面的所有内容copy到目标文件夹下面 果目标文件夹为只读属性就会报错。 
         * 参    数:srcPath:原始路径,aimPath:目标文件夹 
         * 调用示列: 
         *           string srcPath = Server.MapPath( "test/"); 
         *           string aimPath = Server.MapPath( "test1/");
         *           EC.FileObj.CopyDir(srcPath,aimPath);   
        *****************************************/ 
        /// <summary>
        /// 指定文件夹下面的所有内容copy到目标文件夹下面 
        /// </summary>
        /// <param name="srcPath">原始路径</param>
        /// <param name="aimPath">目标文件夹</param>
        public static void CopyDir(string srcPath, string aimPath) 
        { 
            try 
            { 
                // 检查目标目录是否以目录分割字符结束如果不是则添加之 
                if (aimPath[aimPath.Length - 1] != Path.DirectorySeparatorChar) 
                    aimPath += Path.DirectorySeparatorChar; 
                // 判断目标目录是否存在如果不存在则新建之 
                if (!Directory.Exists(aimPath)) 
                    Directory.CreateDirectory(aimPath); 
                // 得到源目录的文件列表,该里面是包含文件以及目录路径的一个数组 
                //如果你指向copy目标文件下面的文件而不包含目录请使用下面的方法 
                //string[] fileList = Directory.GetFiles(srcPath); 
                string[] fileList = Directory.GetFileSystemEntries(srcPath); 
                //遍历所有的文件和目录 
                foreach (string file in fileList) 
                { 
                    //先当作目录处理如果存在这个目录就递归Copy该目录下面的文件

                    if (Directory.Exists(file))
                        CopyDir(file, aimPath + Path.GetFileName(file));
                    //否则直接Copy文件 
                    else 
                        File.Copy(file, aimPath + Path.GetFileName(file), true); 
                } 
            } 
            catch (Exception ee) 
            { 
                throw new Exception(ee.ToString()); 
            } 
        } 
        #endregion

 

 

获取指定文件夹下所有子目录及文件(树形)

  /****************************************
         * 函数名称:GetFoldAll(string Path) 
         * 功能说明:获取指定文件夹下所有子目录及文件(树形) 
         * 参    数:Path:详细路径 
         * 调用示列: 
         *           string strDirlist = Server.MapPath( "templates");       
         *           this.Literal1.Text = EC.FileObj.GetFoldAll(strDirlist); 
        *****************************************/ 
        /// <summary>
        /// 获取指定文件夹下所有子目录及文件 
        /// </summary>
        /// <param name="Path">详细路径</param>
        public static string GetFoldAll(string Path) 
        {

            string str = "";
            DirectoryInfo thisOne = new DirectoryInfo(Path);
            str = ListTreeShow(thisOne, 0, str); 
            return str;

        }

 获取指定文件夹下所有子目录及文件函数

/// <summary>
        /// 获取指定文件夹下所有子目录及文件函数
        /// </summary>
        /// <param name="theDir">指定目录</param>
        /// <param name="nLevel">默认起始值,调用时,一般为0</param>
        /// <param name="Rn">用于迭加的传入值,一般为空</param>
        /// <returns></returns>
        public static string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn)//递归目录 文件 
        { 
            DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录 
            foreach (DirectoryInfo dirinfo in subDirectories) 
            {

                if (nLevel == 0)
                {
                    Rn += "├";
                } 
                else 
                { 
                    string _s = "";
                    for (int i = 1; i <= nLevel; i++)
                    { 
                        _s += "│&nbsp;";
                    } 
                    Rn += _s + "├";
                } 
                Rn += "<b>" + dirinfo.Name.ToString() + "</b><br />";
                FileInfo[] fileInfo = dirinfo.GetFiles();   //目录下的文件 
                foreach (FileInfo fInfo in fileInfo) 
                { 
                    if (nLevel == 0) 
                    { 
                        Rn += "│&nbsp;├";
                    } 
                    else 
                    { 
                        string _f = "";
                        for (int i = 1; i <= nLevel; i++)
                        { 
                            _f += "│&nbsp;";
                        } 
                        Rn += _f + "│&nbsp;├";
                    } 
                    Rn += fInfo.Name.ToString() + " <br />";
                } 
                Rn = ListTreeShow(dirinfo, nLevel + 1, Rn);


            }
            return Rn; 
        }

 获取指定文件夹下所有子目录及文件(下拉框形

 

 

 

 /****************************************
         * 函数名称:GetFoldAll(string Path)
         * 功能说明:获取指定文件夹下所有子目录及文件(下拉框形) 
         * 参    数:Path:详细路径 
         * 调用示列: 
         *            string strDirlist = Server.MapPath( "templates");      
         *            this.Literal2.Text = EC.FileObj.GetFoldAll(strDirlist, "tpl","");
        *****************************************/ 
        /// <summary>
        /// 获取指定文件夹下所有子目录及文件(下拉框形) 
        /// </summary>
        /// <param name="Path">详细路径</param>
        /// <param name="DropName">下拉列表名称</param>
        /// <param name="tplPath">默认选择模板名称</param>
        public static string GetFoldAll(string Path,string DropName,string tplPath) 
        { 
            string strDrop = "<select name=\"" + DropName + "\" id=\"" + DropName + "\"><option value=\"\">--请选择详细模板--</option>";
            string str = "";
            DirectoryInfo thisOne = new DirectoryInfo(Path); 
            str = ListTreeShow(thisOne, 0, str,tplPath); 
            return strDrop+str+ "</select>";

        }

 获取指定文件夹下所有子目录及文件函数

 /// <summary>
        /// 获取指定文件夹下所有子目录及文件函数
        /// </summary>
        /// <param name="theDir">指定目录</param>
        /// <param name="nLevel">默认起始值,调用时,一般为0</param>
        /// <param name="Rn">用于迭加的传入值,一般为空</param>
        /// <param name="tplPath">默认选择模板名称</param>
        /// <returns></returns>
        public static string ListTreeShow(DirectoryInfo theDir, int nLevel, string Rn,string tplPath)//递归目录 文件 
        { 
            DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录

            foreach (DirectoryInfo dirinfo in subDirectories)
            {

                Rn += "<option value=\"" + dirinfo.Name.ToString() + "\"";
                if (tplPath.ToLower() == dirinfo.Name.ToString().ToLower())
                { 
                    Rn += " selected ";
                } 
                Rn += ">";

                if (nLevel == 0)
                {
                    Rn += "┣";
                } 
                else 
                { 
                    string _s = "";
                    for (int i = 1; i <= nLevel; i++)
                    { 
                        _s += "│&nbsp;";
                    } 
                    Rn += _s + "┣";
                } 
                Rn += "" + dirinfo.Name.ToString() + "</option>";


                FileInfo[] fileInfo = dirinfo.GetFiles();   //目录下的文件
                foreach (FileInfo fInfo in fileInfo) 
                { 
                    Rn += "<option value=\"" + dirinfo.Name.ToString()+"/"+fInfo.Name.ToString() + "\"";
                    if (tplPath.ToLower() == fInfo.Name.ToString().ToLower()) 
                    { 
                        Rn += " selected ";
                    } 
                    Rn += ">";

                    if (nLevel == 0)
                    {
                        Rn += "│&nbsp;├";
                    } 
                    else 
                    { 
                        string _f = "";
                        for (int i = 1; i <= nLevel; i++)
                        { 
                            _f += "│&nbsp;";
                        } 
                        Rn += _f + "│&nbsp;├";
                    } 
                    Rn += fInfo.Name.ToString() + "</option>";
                } 
                Rn = ListTreeShow(dirinfo, nLevel + 1, Rn, tplPath);


            }
            return Rn; 
        }

  获取文件夹大小

 #region 获取文件夹大小
        /****************************************
         * 函数名称:GetDirectoryLength(string dirPath) 
         * 功能说明:获取文件夹大小 
         * 参    数:dirPath:文件夹详细路径 
         * 调用示列: 
         *           string Path = Server.MapPath( "templates"); 
         *           Response.Write(EC.FileObj.GetDirectoryLength(Path));       
        *****************************************/ 
        /// <summary>
        /// 获取文件夹大小 
        /// </summary>
        /// <param name="dirPath">文件夹路径</param>
        /// <returns></returns>
        public static long GetDirectoryLength(string dirPath) 
        { 
            if (!Directory.Exists(dirPath)) 
                return 0; 
            long len = 0; 
            DirectoryInfo di = new DirectoryInfo(dirPath); 
            foreach (FileInfo fi in di.GetFiles()) 
            { 
                len += fi.Length; 
            } 
            DirectoryInfo[] dis = di.GetDirectories(); 
            if (dis.Length > 0)
            { 
                for (int i = 0; i < dis.Length; i++)
                { 
                    len += GetDirectoryLength(dis[i].FullName); 
                } 
            } 
            return len; 
        } 
        #endregion

 

 获取指定文件详细属性

 #region 获取指定文件详细属性
        /****************************************
         * 函数名称:GetFileAttibe(string filePath) 
         * 功能说明:获取指定文件详细属性 
         * 参    数:filePath:文件详细路径 
         * 调用示列: 
         *           string file = Server.MapPath( "robots.txt"); 
         *            Response.Write(EC.FileObj.GetFileAttibe(file));         
        *****************************************/ 
        /// <summary>
        /// 获取指定文件详细属性 
        /// </summary>
        /// <param name="filePath">文件详细路径</param>
        /// <returns></returns>
        public static string GetFileAttibe(string filePath) 
        { 
            string str = "";
            System.IO.FileInfo objFI = new System.IO.FileInfo(filePath); 
            str += "详细路径:" + objFI.FullName + "<br>文件名称:" + objFI.Name + "<br>文件长度:" + objFI.Length.ToString() + "字节<br>创建时间" + objFI.CreationTime.ToString() + "<br>最后访问时间:" + objFI.LastAccessTime.ToString() + "<br>修改时间:" + objFI.LastWriteTime.ToString() + "<br>所在目录:" + objFI.DirectoryName + "<br>扩展名:" + objFI.Extension;
            return str; 
        } 
        #endregion

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Photoshop文字排版小技巧。

uploads/200703/28_121659_indesignkerning.gif

这个技巧很基础,不过十分的有用。
在文字区域中按住alt键和键盘的上下左右键,你就可以对文字的间距,行距等进行调整。比起输入数值调整更快更直观。
看看下面的图,你会更清楚。

来自:http://www.5key.net/blog/article.asp id=377

ASP.NET2.0中Page事件的执行顺序

Page执行中将按照如下顺序激活事件:

Page.PreInit
Page.Init
Page.InitComplite
Page.PreLoad
Page.Load
Page.LoadComplete
Page.PreRender
Page.PreRenderComplete

如果页面从令一个页面继承,如BasePage:System.Web.UI.Page,在BasePage中做了一些扩展,如权限检查,而其他页面从BasePage继承,则BasePage和最终Page的事件激活顺序是:

UI.PreInit
Page.PreInit
UI.Init
Page.Init
UI.InitComplite
Page.InitComplite
UI.PreLoad
Page.PreLoad
UI.Load
Page.Load
UI.LoadComplete
Page.LoadComplete
UI.PreRender
Page.PreRender
UI.PreRenderComplete
Page.PreRenderComplete

如果使用了MasterPage,则MasterPage中的事件和ContentPage中的事件按照下面顺序激活:

ContentPage.PreInit
Master.Init
ContentPage.Init
ContentPage.InitComplite
ContentPage.PreLoad
ContentPage.Load
Master.Load
ContentPage.LoadComplete
ContentPage.PreRender
Master.PreRender
ContentPage.PreRenderComplete

更进一步,如果ContentPage继承BasePage,那么,各事件的执行顺序将变成:

UI.PreInit
ContentPage.PreInit
Master.Init
UI.Init
ContentPage.Init
UI.InitComplite
ContentPage.InitComplite
UI.PreLoad
ContentPage.PreLoad
UI.Load
ContentPage.Load
Master.Load
UI.LoadComplete
ContentPage.LoadComplete
UI.PreRender
ContentPage.PreRender
Master.PreRender
UI.PreRenderComplete
ContentPage.PreRenderComplete