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>

Cuyahoga添加模块

Cuyahoga

国外的开源CMS一般都是基于模块设计的 ,好处是可以随意定制自己的页面和模块,这样在以后的应用中就能够灵活的满足变化的功能需求. 一个模块齐全的CMS如DNN , Rainbow就可以快速搭建符合需求的系统.

下面就来介绍如何为Cuyahoga这个著名的开源网站框架加入具有后台管理的公告模块.可以参考这篇如何在Cuyahoga中新增一个简单的功能模块了解基础的步骤.

为Cuyahoga开发自定义模块时,你可以选择任何数据访问策略.然而Cuyahoga本身是使用NHibernate作为数据持久层,可以做到支持多数据库. 采用Castle.Windsor进行依赖注入,降低模块之间的耦合. 我们的数据访问层也将用NHibernate实现.

最终项目的目录结构如下:

主要步骤如下
1 .创建一个Sql文件(Install.sql)用来安装数据表及添加模块的相关信息 , 该sql文件会在安装模块时,由Cuyahoga自动执行.也可以手工执行进行安装.

install.sql
<!–<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
–>IF NOT EXISTS (SELECT * FROM sysobjects WHERE id = OBJECT_ID(N[cm_Announcements]AND OBJECTPROPERTY(id, NIsUserTable= 1)
 
BEGIN
CREATE TABLE [cm_Announcements] (
    
[AnnouncementsID] [int] IDENTITY (1,1)NOT NULL ,
    
[sectionid] [int] NOT NULL ,
    
[createdby] [nvarchar] (100NULL ,//公告作者
    
[Title] [nvarchar] (150NULL ,//公告标题
    inserttimestamp 
datetime DEFAULT current_timestamp NOT NULL,
    updatetimestamp 
datetime DEFAULT current_timestamp NOT NULL,
    
    
CONSTRAINT [PK_cm_Announcements] PRIMARY KEY  NONCLUSTERED 
    (
        
[AnnouncementsID]
    ),
    
CONSTRAINT [FK_cm_Announcements_cm_Modules] FOREIGN KEY 
    (sectionid) 
REFERENCES cuyahoga_section (sectionid)
)
END
GO
/*加入模块信息*/
INSERT INTO cuyahoga_moduletype ([name], assemblyname, classname, path, editpath, inserttimestamp, updatetimestamp) VALUES 
(
AnnouncementsCuyahoga.Modules.AnnouncementsCuyahoga.Modules.Announcements.AnnouncementsModule
Modules/Announcements/Announcements.ascxModules/Announcements/EditAnnouncements.aspxcurrent_timestampcurrent_timestamp)
GO
/*加入模块版本信息*/
INSERT INTO cuyahoga_version (assembly, major, minor, patch) VALUES (Cuyahoga.Modules.Announcements150);
go

2.创建域模型 在本例中是实体类

Announcement.cs
<!–<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
–>using System;
using Cuyahoga.Core.Domain;

namespace Cuyahoga.Modules.Announcements.Domain
{
    public class Announcement
    {
        private 
int _id;
        private string _title;
        private string _content;
        private 
DateTime _expiredate;
        private Section _section;
        private 
User _createdBy;
        private 
DateTime _updateTimestamp;

        /// <summary>
        
/// Property Id (int)
        
/// </summary>
        
public int Id
        {
            get { 
return this._id; }
            
set { this._id = value; }
        }
        
/// <summary>
        
/// Property Title (string)
        
/// </summary>
        
public string Title
        {
            get { 
return this._title; }
            
set { this._title = value; }
        }
        
/// <summary>
        
/// Property Section (Section)
        
/// </summary>
        
public Section Section
        {
            get { 
return this._section; }
            
set { this._section = value; }
        }
        
/// <summary>
        
/// Property CreatedBy (User)
        
/// </summary>
        
public User CreatedBy
        {
            get { 
return this._createdBy; }
            
set { this._createdBy = value; }
        }
        
/// <summary>
        
/// Property UpdateTimestamp (DateTime)
        
/// </summary>
        
public DateTime UpdateTimestamp
        {
            get { 
return this._updateTimestamp; }
            
set { this._updateTimestamp = value; }
        }
        
public Announcement()
        {
            this._id 
= 1;
        }
    }
}

3.创建映射文件

Announcement.hbm.xml
<!–<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
–>xml version=”1.0″ encoding=”utf-8″  >
<hibernate-mapping xmlns=”urn:nhibernate-mapping-2.0″>
  
<class name=”Cuyahoga.Modules.Announcements.Domain.Announcement, Cuyahoga.Modules.Announcements” table=”cm_Announcements”>
    
<id name=”Id” column=”Announcementsid” type=”Int32″ unsaved-value=”-1″>
      
<generator class=”native”>
        
<param name=”sequence”>cm_Announcements_Announcementsid_seq</param>
      
</generator>
    
</id>
    
<timestamp name=”UpdateTimestamp” column=”updatetimestamp” />
    
<property name=”Title” column=”title” type=”String” length=”150″ />
    
<many-to-one name=”Section” class=”Cuyahoga.Core.Domain.Section, Cuyahoga.Core” column=”sectionid” not-null=”true” />
    
<many-to-one name=”CreatedBy” class=”Cuyahoga.Core.Domain.User, Cuyahoga.Core” column=”createdby” not-null=”true” />
  
</class>
</hibernate-mapping>

4.创建公告模块的核心控制类

AnnouncementsModule.cs
<!–<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
–>using System;
using System.Collections;
using System.Xml;
using System.Xml.XPath;
using System.Net;
using System.Web;
using System.Text;
using System.IO;
using System.Threading;

using NHibernate;
using Castle.Services.Transaction;
using Castle.Facilities.NHibernateIntegration;

using log4net;

using Cuyahoga.Core;
using Cuyahoga.Core.Domain;
using Cuyahoga.Core.Service;
using Cuyahoga.Core.Util;
using Cuyahoga.Web.Util;
using Cuyahoga.Web.Components;
using Cuyahoga.Modules.Announcements.Domain;

namespace Cuyahoga.Modules.Announcements
{
    
//采用Facilities管理事务
    [Transactional]
    
public class AnnouncementsModule : ModuleBase, INHibernateModule
    {
        
private static readonly ILog log = LogManager.GetLogger(typeof(AnnouncementsModule));
        
private int _cacheDuration;
        
private ISessionManager _sessionManager;

        //该模块需要用到NHibernate session manager提供的服务 进行依赖注入
        public AnnouncementsModule(ISessionManager sessionManager)
        {
            
this._sessionManager = sessionManager;
        }

        public override void ReadSectionSettings()
        {
            
base.ReadSectionSettings();
            
// Set dynamic module settings
            this._cacheDuration = Convert.ToInt32(base.Section.Settings[CACHE_DURATION]);
        }

        ///不创建子事务
        [Transaction(TransactionMode.RequiresNew)]
        
public virtual IList GetAllAnnouncements()
        {
            ISession session 
= this._sessionManager.OpenSession();
            
string hql = from Announcement f where f.Section.Id = :sectionId;
            IQuery q 
= session.CreateQuery(hql);
            q.SetInt32(
sectionIdbase.Section.Id);
            
return q.List();
        }

        [Transaction(TransactionMode.RequiresNew)]
        public virtual Announcement GetAnnouncementsById(int AnnouncementsID)
        {
            ISession session 
= this._sessionManager.OpenSession();
            
return (Announcement)session.Load(typeof(Announcement), AnnouncementsID);
        }

        [Transaction(TransactionMode.RequiresNew)]
        public virtual void SaveAnnouncement(Announcement announcements)
        {
            ISession session 
= this._sessionManager.OpenSession();
            session.SaveOrUpdate(announcements);
        }

        [Transaction(TransactionMode.RequiresNew)]
        public virtual void DeleteAnnouncements(Announcement announcements)
        {
            ISession session 
= this._sessionManager.OpenSession();
            session.Delete(announcements);
        }
    }
}

5.创建用于前台显示的用户控件 用来显示公告的标题 作者和发布时间.

Announcements.ascx
<!–<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
–><%@ Control Language=C# AutoEventWireup=true Codebehind=Announcements.ascx.cs
    Inherits
=Cuyahoga.Modules.Announcements.Web.Announcements %>
<asp:repeater id=rptAnnouncementItems runat=server enableviewstate=False>
    
<itemtemplate>
            
<div class=genericdetails style=width:100%>
            
<marquee  direction=left >
                
<asp:label id=lblTitle runat=server><%# DataBinder.Eval(Container.DataItem, Title)%></asp:label>
                
<asp:label id=lblAuthor runat=server>作者:<%# DataBinder.Eval(Container.DataItem, CreatedBy.FullName)%></asp:label>
                
<asp:label id=lblTime runat=server>发布时间:<%# DataBinder.Eval(Container.DataItem, UpdateTimestamp)%></asp:label>
            
</marquee>
            
</div>
    
</itemtemplate>
</asp:repeater>

Announcements.ascx.cs
<!–<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
–>using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

using Cuyahoga.Core.Util;
using Cuyahoga.Web.UI;
using Cuyahoga.Modules.Announcements.Domain;

namespace Cuyahoga.Modules.Announcements.Web
{
    
public partial class Announcements : BaseModuleControl
    {
        
private AnnouncementsModule _module;
        
protected void Page_Load(object sender, EventArgs e)
        {
            
if (!this.IsPostBack && !base.HasCachedOutput)
            {
                
this._module = base.Module as AnnouncementsModule;
                
this.rptAnnouncementItems.DataSource = this._module.GetAllAnnouncements();
                
this.rptAnnouncementItems.DataBind();
            }
        }
    }
}

6.创建公告管理的列表页面

EditAnnouncements.aspx
<!–<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
–><%@ Page Language=C# AutoEventWireup=true Codebehind=EditAnnouncements.aspx.cs
    Inherits
=Cuyahoga.Modules.Announcements.Web.EditAnnouncements %>

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
    
<title>公告管理页面</title>
</head>
<body>
    
<form id=”Form1″ method=”post” runat=”server”>
        
<div id=”moduleadminpane”>
            
<h1>
                公告管理
</h1>
            
<table class=”tbl”>
                
<asp:Repeater ID=”rptAnnouncements” runat=”server” OnItemDataBound=”rptFiles_ItemDataBound”>
                    
<HeaderTemplate>
                        
<tr>
                            
<th>
                                公告标题
</th>
                            
<th>
                                作者
</th>
                            
<th>
                                发布日期
</th>
                            
<th>
                            
</th>
                        
</tr>
                    
</HeaderTemplate>
                    
<ItemTemplate>
                        
<tr>
                            
<td>
                                
<%# DataBinder.Eval(Container.DataItem, Title%>
                            
</td>
                            
<td>
                                
<%# DataBinder.Eval(Container.DataItem, CreatedBy.FullName)%>
                            
</td>
                            
<td>
                                
<asp:Literal ID=”litDateModified” runat=”server”></asp:Literal></td>
                            
<td>
                                
<asp:HyperLink ID=”hplEdit” runat=”server”>修改</asp:HyperLink>
                            
</td>
                        
</tr>
                    
</ItemTemplate>
                
</asp:Repeater>
            
</table>
            
<br />
            
<input id=”btnNew” type=”button” value=”新的公告” runat=”server” name=”btnNew”/>
        
</div>
    
</co

如何实现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>

打发时光的102个好网站

1,看看自己具有哪个大明星的脸型 <a href="http://www.play-analogia.com/cgi-bin/index/" target=_blank><font color=#3b5998>http://www.play-analogia.com/cgi-bin/index/</font></a> <br><br>  2,超有意思的Flash网站,虚拟办公 <a href="http://agencynet.com/" target=_blank><font color=#3b5998>http://agencynet.com</font></a><br><br>  3,亲自动手给美女画纹身 <a href="http://www.crustydemons.co.uk/UK/tattoo_parlour/index.html" target=_blank><font color=#3b5998>http://www.crustydemons.co.uk/UK/tattoo_parlour/index.html</font></a><br><br>  4,输入文字就发出声音! <a href="http://www.putonghuaonline.com/" target=_blank><font color=#3b5998>http://www.putonghuaonline.com</font></a><br><br>  只支持繁体中文,同时也是学习普通话和粤语的好地方<br><br>  5,在线做个通缉令 <a href="http://www.glassgiant.com/wanted/" target=_blank><font color=#3b5998>http://www.glassgiant.com/wanted/</font></a><br><br>  6,制作属于自己的卡通大头像吧 <a href="http://cartoon.msn.com.cn/" target=_blank><font color=#3b5998>http://cartoon.msn.com.cn</font></a><br><br>  7,在你的照片上添加有趣对话 <a href="http://www.bubblesnaps.com/" target=_blank><font color=#3b5998>http://www.bubblesnaps.com</font></a><br><br>  8,这个网站提供各种有趣的在线拼图 <a href="http://www.thebroth.com/" target=_blank><font color=#3b5998>http://www.thebroth.com</font></a><br><br>  9,很逼真!模仿XP系统操作的网站 <a href="http://www.kingnare.com/" target=_blank><font color=#3b5998>http://www.kingnare.com</font></a><br><br>  10,原来制作带阴影的LOGO如此容易 <a href="http://msig.info/web2.php" target=_blank><font color=#3b5998>http://msig.info/web2.php</font></a><br><br>  11,教你打领带 <a href="http://www.tieknot.com/dalingdai.html" target=_blank><font color=#3b5998>http://www.tieknot.com/dalingdai.html</font></a><br><br>  12,系鞋带的N种方法 <a href="http://www.fieggen.com/shoelace/lacingmethods.htm#2trillion" target=_blank><font color=#3b5998>http://www.fieggen.com/shoelace/lacingmethods.htm#2trillion</font></a><br><br>  13,咱也弄个自己的徽章玩玩 <a href="http://www.says-it.com/seal/index.php" target=_blank><font color=#3b5998>http://www.says-it.com/seal/index.php</font></a><br><br>  14,在线素描 <a href="http://flashface.ctapt.de/" target=_blank><font color=#3b5998>http://flashface.ctapt.de</font></a><br><br>  15,各种动画图标制做 <a href="http://ajaxload.info/" target=_blank><font color=#3b5998>http://ajaxload.info</font></a><br><br>  16,各种字体图片制做 <a href="http://cooltext.com/" target=_blank><font color=#3b5998>http://cooltext.com</font></a><br><br>  17,<a href="http://www.pollyglotto.com/index8.php" target=_blank><font color=#3b5998>http://www.pollyglotto.com/index8.php</font></a><br><br>  超牛的语音翻译,输入文字里面的人自动给你以语音的形式翻译出来,有趣的是他眼睛跟你你鼠标转,遗憾的是不是免费的!<br><br>  18,你今天印书了么?免费将你的博客翻印成书 <a href="http://www.mrprint.cn/ UN=f1208b59454a9a744055&amp;ShowType=0" target=_blank><font color=#3b5998>http://www.mrprint.cn/ UN=f1208b59454a9a744055&amp;ShowType=0</font></a><br><br>  19,做个德国身份证玩玩 <a href="http://onlinewahn.de/generator/" target=_blank><font color=#3b5998>http://onlinewahn.de/generator/</font></a><br><br>  20,自己做个图来让别人拼 <a href="http://www.flash-gear.com/puzzle/" target=_blank><font color=#3b5998>http://www.flash-gear.com/puzzle/</font></a><br><br>  21,在线媒体提取工具 <a href="http://solor.cn/" target=_blank><font color=#3b5998>http://solor.cn</font></a><br><br>  22,DiY网络拼图 <a href="http://www.webpuzzle.cn/" target=_blank><font color=#3b5998>http://www.webpuzzle.cn</font></a><br><br>  23,2G网络硬盘,仿windows操作系统 <a href="http://www1.pc2n.com/" target=_blank><font color=#3b5998>http://www1.pc2n.com</font></a><br><br>  24.在线媒体转换工具 <a href="http://media-convert.com/" target=_blank><font color=#3b5998>http://media-convert.com</font></a><br><br>  它支持大量的文件格式之间的互相转换,包括视频、音频、PPT文档、Word文档、表格文档、图片等等数十种之多。比如你可以把mp3转换成wav,把png转换成gif,把word文件转换成txt文件<br><br>  25.在线保存,分享和交流网页,博客,新闻 <a href="http://www.hinale.com/" target=_blank><font color=#3b5998>http://www.hinale.com</font></a><br><br>  为您的一篇文章嵌入Hinale按钮,更方便用户保存和交流您的文章<br><br>  26.blog 搜索引擎 <a href="http://www.gnoos.com.au/" target=_blank><font color=#3b5998>http://www.gnoos.com.au</font></a><br><br>  27.[ ImageCrop ] <a href="http://www.imagecrop.com/" target=_blank><font color=#3b5998>http://www.imagecrop.com</font></a><br><br>  功能相对简单,它其实是一款为MSN、Yahoo Messager等制作头像的剪裁工具,因此,它的特色在于内置了专用尺寸模板,比如MSN、论坛头像75&#215;75或85&#215;85的尺寸等等。当然也可以自定义大小。<br><br>  28.[ Online Image Editor ] <a href="http://www.online-image-editor.com/" target=_blank><font color=#3b5998>http://www.online-image-editor.com</font></a><br><br>  支持JPG、PNG、GIF及BMP格式的图像,具备可转换颜色模式,添加边框,转换图像格式等功能,内置10个滤镜效果。<br><br>  29.[ GifWorks ]Gif动画处理工具 <a href="http://gifworks.com/" target=_blank><font color=#3b5998>http://gifworks.com</font></a><br><br>  可生成动画效果的文字,不过不支持中文。可编辑的图像格式只有Gif类型,允许上传最大单个文件为400K。具备30多种滤镜效果、3 种优化工具及旋转、剪裁等常用图像编辑功能<br><br>  30.[ Colorcombos ] <a href="http://www.colorcombos.com/" target=_blank><font color=#3b5998>http://www.colorcombos.com</font></a><br><br>  是一个网页配色自动探测工具,你只需输入网站地点,它就会帮你把该网站当前的网页配色方案展示出来,并提供相应的色值<br><br>  31.[ PhotoShow ] <a href="http://www.photoshow.com/" target=_blank><font color=#3b5998>http://www.photoshow.com</font></a><br><br>  是一个新型的图片展示服务,利用Flash技术构建。事实上,也可以把它当作如<br><br>  [ ibloks ] <a href="http://www.wappblog.com/entry/200.html" target=_blank><font color=#3b5998>http://www.wappblog.com/entry/200.html</font></a><br><br>  [ Eyespot ] <a href="http://www.wappblog.com/entry/108.html" target=_blank><font color=#3b5998>http://www.wappblog.com/entry/108.html</font></a><br><br>  等这样的混合工具,它可把图片及音乐混合,做成一段效果非常酷的流媒体。<br><br>  32.[ Imagesquash ] <a href="http://www.imagesquash.com/" target=_blank><font color=#3b5998>http://www.imagesquash.com</font></a><br><br>  又是一个图片转换工具,它可以根据按上传图片大小的百分比进行缩小,可转换图片格式为Jpeg、Gif及PNG,可改变图片质量。<br><br>  33.[ 在线ping你的博客 ] <a href="http://214.5d6d.com/" target=_blank><font color=#0000ff>http://214.5d6d.com/</font></a><br><br>  34.[ iBloks ] 是一个多媒体混合工具,它能把照片及音乐混合成一段视频<br><br>  <a href="http://www.ibloks.com/" target=_blank><font color=#3b5998>http://www.ibloks.com</font></a>  <br><br>  35.[ Web2.0 STYLr ] 是一个web2.0 Logo制作工具<br><br>  <a href="http://web2.0stylr.com/stylr.aspx" target=_blank><font color=#3b5998>http://web2.0stylr.com/stylr.aspx</font></a><br><br>  36.[ Web2.0 Logo Creator ] <a href="http://msig.info/web2.php" target=_blank><font color=#3b5998>http://msig.info/web2.php</font></a><br><br>  是一个专门用来制作web2.0网站logo的在线工具,制作出的logo具备了几个web2.0元素,比如倒影、beta标志等等,在有些地方可能不能打开这个网站,可以去<a href="http://www.cnproxy.com/webproxy.asp" target=_blank><font color=#3b5998>http://www.cnproxy.com/webproxy.asp</font></a>,通过代理打开!!<br><br>  37.爱因斯坦写汉字 <a href="http://www.sbfun.org/einstein/index.php" target=_blank><font color=#3b5998>http://www.sbfun.org/einstein/index.php</font></a><br><br>  38.[ Crusty Demons ] <a href="http://www.crustydemons.co.uk/UK/tattoo_parlour/index.html" target=_blank><font color=#3b5998>http://www.crustydemons.co.uk/UK/tattoo_parlour/index.html</font></a>]<br><br>  是一个在线的纹身视频制作工具,可自定义纹身图案、文字内容和纹身位置,完成后会生成一段视频,并且可下载图片或者发送给朋友<br><br>  39.[ Ponyfish ] <a href="http://www.ponyfish.com/" target=_blank><font color=#3b5998>http://www.ponyfish.com</font></a><br><br>  是一个在线Feed创建工具<br><br>  40.[ SubAdjust-Web ] <a href="http://dev.pdvel.com/subadjust/index.php" target=_blank><font color=#3b5998>http://dev.pdvel.com/subadjust/index.php</font></a><br><br>  是一个用来调整DVD字幕的在线工具,你可以通过<br><br>  [ SubAdjust-Web ] <a href="http://dev.pdvel.com/subadjust/index.php" target=_blank><font color=#3b5998>http://dev.pdvel.com/subadjust/index.php</font></a><br><br>  来调整DIVX字幕的时间,以便使其与DVD视频同步,另外还可以用来在SubRip和MirroDVD字幕两种格式之间互换。<br><br>  41.在线favicon图标制作 <a href="http://tools.dynamicdrive.com/favicon/" target=_blank><font color=#3b5998>http://tools.dynamicdrive.com/favicon/</font></a><br><br>  42.[ converticon.com ] <a href="http://converticon.com/" target=_blank><font color=#3b5998>http://converticon.com</font></a><br><br>  是一个在线ico文件和png文件互相转化工具<br><br>  43.[ krun.ch ] <a href="http://krun.ch/" target=_blank><font color=#3b5998>http://krun.ch</font></a><br><br>  提供了本地文件和网络文件的压缩和解压四种功能,压缩或解压缩后的文件可以下载到本地。另外它提供了zip、rar和gzip压缩文件格式供选择<br><br>  44.[ 在线做个徽章 ] <a href="http://www.says-it.com/seal/index.php" target=_blank><font color=#3b5998>http://www.says-it.com/seal/index.php</font></a><br><br>  45.在这里,你可以在线做个以自己照片做硬币人物的硬币图片,好酷哦!!<br><br>  <a href="http://onlinewahn.de/generator/m-maker.htm" target=_blank><font color=#3b5998>http://onlinewahn.de/generator/m-maker.htm</font></a><br><br>  46.想想自己的照片被外文报纸刊登在头版头条该是多么风光,在这里就可以轻松实现 <a href="http://onlinewahn.de/generator/z-maker.htm" target=_blank><font color=#3b5998>http://onlinewahn.de/generator/z-maker.htm</font></a><br><br>  47.一个在线生成flash菜单的网站,对站长很有帮助. <a href="http://www.hostsun.com/gr/flash_generators.php" target=_blank><font color=#3b5998>http://www.hostsun.com/gr/flash_generators.php</font></a><br><br>  48.对有些做了IP限制的网站,可能无法访问,可以使用这个代理访问. <a href="http://www.cnproxy.com/" target=_blank><font color=#3b5998>http://www.cnproxy.com</font></a><br><br>  49.在线图片处理,网通 <a href="http://www.iephotoshop.com/" target=_blank><font color=#3b5998>http://www.iephotoshop.com</font></a><br><br>   电信 <a href="http://www1.iephotoshop.com/" target=_blank><font color=#3b5998>http://www1.iephotoshop.com</font></a><br><br>  50.你可以制作出很有专业水准的动态logo,有很多的样式供你选择 <a href="http://www.logomaker.cn/" target=_blank><font color=#3b5998>http://www.logomaker.cn</font></a><br><br>  51.Flash头像 <a href="http://www.dookyweb.com/avatars.swf" target=_blank><font color=#3b5998>http://www.dookyweb.com/avatars.swf</font></a><br><br>  52.印象派涂鸦板 <a href="http://jacksonpollock.org/" target=_blank><font color=#3b5998>http://jacksonpollock.org</font></a><br><br>  53.在线网页截屏工具,在浏览器地址栏输入下面的代码就可以了。<br><br>  <a href="http://images.websnapr.com/ url=thw.568idc.com" target=_blank><font color=#3b5998>http://images.websnapr.com/ url=thw.568idc.com</font></a>红色部分换成你想要截的网页的地址<br><br>  54.另外两个好用在线网页截屏工具 <a href="http://www.browsrcamp.com/" target=_blank><font color=#3b5998>http://www.browsrcamp.com/</font></a> 和 <a href="http://snap.otag.cn/screenshot.aspx" target=_blank><font color=#3b5998>http://snap.otag.cn/screenshot.aspx</font></a><br><br>  55.可以突破网吧的下载限制进行下载 <a href="http://thw.568idc.com/serve/xiazai.html" target=_blank><font color=#3b5998>http://thw.568idc.com/serve/xiazai.html</font></a><br><br>  56.跳转FLASH生成工具 <a href="http://www.dfxy.org/tiao/" target=_blank><font color=#3b5998>http://www.dfxy.org/tiao/</font></a><br><br>  57.[krun.ch] <a href="http://krun.ch/" target=_blank><font color=#3b5998>http://krun.ch</font></a><br><br>  是一个在线压缩工具,它提供了本地文件上传压缩和解压、网络文件的压缩和解压四种功能,压缩或解压缩后的文件可以下载到本地或者通过Email发送。另外它提供了zip、rar和gzip压缩文件格式供选择。<br><br>  58.在线生成纯css代码实现的圆角矩形的网站,对网站制作者很有用的东西<br><br>  <a href="http://www.spiffycorners.com/" target=_blank><font color=#3b5998>http://www.spiffycorners.com</font></a><br><br>  59.it" target=_blank&amp;gt;http://pentacom.jp/soft/ex/" target=_blank&amp;gt;http://www.onlinewahn.de/generator/m-maker.htm<br><br>  61.图片仓库:            <br><br>  <a href="http://pic.sdodo.com/" target=_blank><font color=#3b5998>http://pic.sdodo.com/</font></a><a href="http://pic.sdodo.com/" target=_blank><font color=#0000ff>http://pic.sdodo.com/</font></a><br><br>  62.在线FLASH动画制作         <br><br>  <a href="http://www.dfilm.com/index_movie_start.html" target=_blank><font color=#3b5998>http://www.dfilm.com/index_movie_start.html</font></a><br><br>  63.图片生成网页图标          <br><br>  <a href="http://www.chami.com/html-kit/services/favicon/" target=_blank><font color=#3b5998>http://www.chami.com/html-kit/services/favicon/</font></a><br><br>  64.由蝌蚪网络提供的Gmail注册入口   <br><br>  <a href="http://cnc.kedooo.net/gmail/" target=_blank><font color=#3b5998>http://cnc.kedooo.net/gmail/</font></a><br><br>  65.最全的邮件/QQ/MSN/BLOG图片生成器 <br><br>  <a href="http://www.eoool.com/" target=_blank><font color=#3b5998>http://www.eoool.com/</font></a><br><br>  66.收藏夹图标生成器         <br><br>  <a href="http://www.html-kit.com/e/favicon.cgi" target=_blank><font color=#3b5998>http://www.html-kit.com/e/favicon.cgi</font></a><br><br>  67.在线域名LOGO生成         <br><br>  <a href="http://phorum.com.tw/Generator.aspx" target=_blank><font color=#3b5998>http://phorum.com.tw/Generator.aspx</font></a><br><br>  68.免费3D banner在线制做网站    <br><br>  <a href="http://www.3dtextmaker.com/cgi-bin/3dtext.pl" target=_blank><font color=#3b5998>http://www.3dtextmaker.com/cgi-bin/3dtext.pl</font></a><br><br>  69.输入图片就能查看字体      <br><br>  <a href="http://www.my/" target=_blank><font color=#3b5998>http://uptime.netcraft.com/up/</font></a><br><br>  72.查看该域名IP主机下的其他域名  <br><br>  <a href="http://whois.webhosting.info/" target=_blank><font color=#3b5998>http://whois.webhosting.info/</font></a><br><br>  73.生成email图片         <br><br>  <a href="http://www.nhacks.com/email/index.php" target=_blank><font color=#3b5998>http://www.nhacks.com/email/index.php</font></a><br><br>  74.世界网络里面有很多不错的测试  <br><br>  <a href="http://www.linkwan.com/gb/broadmeter" target=_blank><font color=#3b5998>http://www.linkwan.com/gb/broadmeter</font></a><br><br>  75.几个大城市的地图搜索      <br><br>  <a href="http://map.zhongsou.com/" target=_blank><font color=#3b5998>http://map.zhongsou.com</font></a><br><br>  76.图片标签快速生成工具      <br><br>  <a href="http://www.eoool.com/" target=_blank><font color=#3b5998>http://www.eoool.com/</font></a><br><br>  77.查询在google所有服务器中的PR值 <br><br>  <a href="http://www.iwebtool.com/pagerank_checker domain=www.XXXXXoob.com" target=_blank><font color=#3b5998>http://www.iwebtool.com/pagerank_checker domain=www.XXXXXoob.com</font></a><br><br>  78.免费加入140个搜索引擎     <br><br>  <a href="http://freehosting.hostrave.com/p/ledbetter/submitware/index.php" target=_blank><font color=#3b5998>http://freehosting.hostrave.com/p/ledbetter/submitware/index.php</font></a><br><br>  79.在线生成多种样式的LOGO <a href="http://sherlocco.com/create.asp" target=_blank><font color=#3b5998>http://sherlocco.com/create.asp</font></a><br><br>  80.街道路牌签名生成器       <br><br>  <a href="http://www.streetsigngenerator.com/" target=_blank><font color=#3b5998>http://www.streetsigngenerator.com/</font></a><br><br>  81.blog标签图片80&#215;15/80&#215;31制作 <br><br>  <a href="http://button.blogflux.com/" target=_blank><font color=#3b5998>http://button.blogflux.com/</font></a><br><br>  82.在线生成漫画小图像的站     <br><br>  <a href="http://www.abi-station.com/tchinese/" target=_blank><font color=#3b5998>http://www.abi-station.com/tchinese/</font></a><br><br>  83.生成邮址图片\条形码生成\印章  <br><br>  <a href="http://www.makepic.com/" target=_blank><font color=#3b5998>http://www.makepic.com/</font></a><br><br>  84.QQ在线状态代码生成       <br><br>  <a href="http://is.qq.com/webpresence/code.shtml" target=_blank><font color=#3b5998>http://is.qq.com/webpresence/code.shtml</font></a><br><br>  85.身份证号码在线生成器-韩国/台湾 <br><br>  <a href="http://i972.net/~gen/" target=_blank><font color=#3b5998>http://i972.net/~gen/</font></a><br><br>  86.条形码在线生成器        <br><br>  <a href="http://www.gzbonny.com/asp/barcode.asp" target=_blank><font color=#3b5998>http://www.gzbonny.com/asp/barcode.asp</font></a><br><br>  87.聊天工具在线状态生成器     <br><br>  <a href="http://www.onlinestatus.org/usage.php" target=_blank><font color=#3b5998>http://www.onlinestatus.org/usage.php</font></a><br><br>  88.在线字体生成工具        <br><br>  <a href="http://www.youmade.com/" target=_blank><font color=#3b5998>http://www.logomaker.cn/</font></a><br><br>  90.在线制作卡通头像        <br><br>  <a href="http://cartoon.msn.com.cn/" target=_blank><font color=#3b5998>http://cartoon.msn.com.cn/</font></a><br><br>  91.网站综合信息查询        <br><br>  <a href="http://www.webmasterhome.cn/" target=_blank><font color=#3b5998>http://www.webmasterhome.cn/</font></a><br><br>  92.在线制作按钮(多种款式)     <br><br>  <a href="http://www.buttonator.com/" target=_blank><font color=#3b5998>http://www.buttonator.com</font></a><br><br>  93.在线建立您的Web 2.0网站LOGO  <br><br>  <a href="http://web2.0stylr.com/" target=_blank><font color=#3b5998>http://web2.0stylr.com</font></a><br><br>  94.在线生成彩字(爱狗狗吧)     <br><br>  <a href="http://www.igogo8.com/" target=_blank><font color=#3b5998>http://www.igogo8.com/</font></a><br><br>  95.live个性图标在线制作      <br><br>  <a href="http://linux-fans.com/email/live/live.php" target=_blank><font color=#3b5998>http://linux-fans.com/email/live/live.php</font></a><br><br>  96.在线(IE版)图像处理工具     <br><br>  <a href="http://www1.iephotoshop.com/" target=_blank><font color=#3b5998>http://www1.iephotoshop.com/</font></a><br><br>  97.ajax载入效果          <br><br>  <a href="http://ajaxload.info/" target=_blank><font color=#3b5998>http://ajaxload.info/</font></a><br><br>  98.报纸头条图片生成器       <br><br>  <a href="http://www.onlinewahn.de/generator/z-maker.htm" target=_blank><font color=#3b5998>http://www.onlinewahn.de/generator/z-maker.htm</font></a><br><br>  99.杂志封面生成器         <br><br>  <a href="http://www.funonit.com/funny_jokes/fake_magazine" target=_blank><font color=#3b5998>http://www.funonit.com/funny_jokes/fake_magazine</font></a><br><br>  100.MD5加密破解查询        <br><br>  <a href="http://www.md5.org.cn/" target=_blank><font color=#3b5998>http://www.md5.org.cn/</font></a><br><br>  102.批量查询未注册域名       <br><br>  <a href="http://www.moniker.com/domains/batch_reg.jsp" target=_blank><font color=#3b5998>http://www.moniker.com/domains/batch_reg.jsp

FreeTextBox使用详解

版本: FreeTextBox 3.1.1 ASP.NET1.1
1.下载 FreeTextBox 3.1.1 (released 2005/11/08)
http://www.freetextbox.com/downloads.aspx
2. 安装
FreeTextBox 3.0以上版本均支持内部模式,即图片资源和javascript都集成在dll中,
本文仅探讨内部模式(Internal Resources).
1) 把FTBv3-1-1\Framework-1.1\FreetextBox.dll拷入bin目录.
2) 在项目中添加FreetextBox.dll的dll引用
3) Web.config加入如下代码
< xml version=”1.0″ encoding=”utf-8″  >
<configuration>
<httpHandlers>
<add verb=”GET” path=”FtbWebResource.axd” type=”FreeTextBoxControls.AssemblyResourceHandler, FreeTextBox” />
</httpHandlers>
</system.web>
</configuration>
3. 使用FreeTextBox
1) aspx页面顶上
<%@ Register TagPrefix=”FTB” Namespace=”FreeTextBoxControls” Assembly=”FreeTextBox” %>
2) 调用
<FTB:FreeTextBox id=”FreeTextBox1″ runat=”Server” />
3)工具栏皮肤
ToolbarStyleConfiguration = Offoce2003/OfficeXP/Office2000/MAC
4) 得到保存编辑的内容
private void InitializeComponent()
{
this.FreeTextBox1.SaveClick += new System.EventHandler(this.FreeTextBox1_SaveClick);
this.Button1.Click += new System.EventHandler(this.FreeTextBox1_SaveClick);
this.Load += new System.EventHandler(this.Page_Load);
}
private void FreeTextBox1_SaveClick(object sender, System.EventArgs e)
{
divshow.InnerHtml = FreeTextBox1.Text;
}
5) 从客户端中检测到有潜在危险的 Request.Form 值
<%@ Page language=”c#” … ValidateRequest=”false”%>
4 图片上传
1) 工具栏上添加ImageGallery按钮.
<FTB:FreeTextBox ..ToolbarLayout=” ..,InsertImageFromGallery,.. />
2) 拷贝 “ftb.imagegallery.aspx” 文件到同一目录下
http://wiki.freetextbox.com/default.aspx/FreeTextBoxWiki.ImageGallery
3) FreeTextBox 属性设置
ImageGalleryPath = “~/image/upload” 上传默认路径
ImageGalleryUrl = “ftb.imagegallery.aspx rif={0}&cif={0}” ftb.imagegallery.aspx的目录, 只能用相对目录,不可以用”~”
4) ImageGallery 的设置
ftb.imagegallery.aspx文件里
<FTB:ImageGallery id=”ImageGallery1″
JavaScriptLocation=”InternalResource”
UtilityImagesLocation=”InternalResource”
SupportFolder=”~/aspnet_client/FreeTextBox/”
AllowImageDelete=true AllowImageUpload=true
AllowDirectoryCreate=false AllowDirectoryDelete=false
runat=”Server” />
AllowDirectoryCreate – 能否建立文件夹
AllowDirectoryDelete – 能否删除文件夹
AllowImageUpload – 能否上传图片
AllowImageDelete – 能否删除图片
AcceptedFileTypes – 可以上传文件扩展名的数组(array)
为开发者提供的2个属性
CurrentDirectories – a string[] array of directories to allow the user to navigate toward
CurrentImages – a FileInfo[] array of files the user should be able to insert.

建议: 删掉Page_Load事件可以显著回避上传图片不能即时显示的问题. 不要重写Page_Load
补充
========================================================================
Freetextbox是一个免费的.net mshtml 编辑器。
我所用的免费的freetextbox版本是中文版本1.6.3的汉化的freetextbox。
获得的地址。http://www.percyboy.com/w/ftb/
下载之后仔细看看其中的说明,你就可以使用这个完美的编辑器。
其中示例是在内联代码方式下,如果在代码后置下使用Freetextbox 呢。
1、首先我们把 FreeTextBox.dll 文件copy到我们的项目中的bin目录里。
然后在我们的项目里添加新的引用,在添加引用对话框选择项目标签,
浏览/选择你的FreeTextBox.dll/打开/确定。应用就添加完成了。
2、如何获得FreeTextBox.dll 中所使用到的名字空间,本中文版本1.6.3 有3个名字空间。
using FreeTextBoxControls;
using FreeTextBoxControls.Design;
using FreeTextBoxControls.Common;
可以在引用的FreeTextBox.dll 查看对象浏览。
点开树型目录就可以清晰的看到,上面所说的名字空间了。
其他的版本类似可以获得。
3、在aspx文件添加freetextbox
<%@ Register TagPrefix=”ftb” Namespace=”FreeTextBoxControls” Assembly=”FreeTextBox” %>
具体的方法和内联一样的。
同时cs文件中会有如下代码:
protected FreeTextBoxControls.FreeTextBox FreeTextBox1;产生
添加完后,运行一下就可以看到结果了。
在设计模式下我们还可以查看FreeTextBox 属性。
4、如何把FreeTextBox 内容写到数据库,我们在aspx文件中添加一个bottom
其的onclick=“my_add”
cs文件
protected void my_add(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Response.Write(FreeTextBox1.Text);
}
此处是输出内容,可以改成我们需要方法。

FreeTextBox使用方法集合

作者:刘一 时间:2005-6-16
我在此网站http://www.percyboy.com/w/ftb/down/下载了
FreeTextBox 1.6.3 中文版 [307KB]
FreeTextBox 1.6.3 中文版源代码 [420KB]
1.先把freetextbox.dll添加到项目中

2.把 – ftb.colorpicker.aspx
– ftb.imagegallery.aspx
– ftb.inserttable.aspx
从文件夹HelperScripts复制出来,放到外面与 – test.aspx (测试)同等级目录,
(不这么做,插入背景色,图片,表格就不好使)

3.把images文件夹放到test.aspx (测试)同等级目录下,来存放上传的图片.

4.在test.aspx 中,加图片的路径
<FTB:FreeTextBox id=”FreeTextBox1″ runat=”server” Width=”700″ ButtonPath=”\images\ftb\office2003\”/>

this.FreeTextBox1.Text 这个就是FTB中你输入的文本的内容,这是带HTML标记的

this.FreeTextBox1.HtmlStrippedText 这个是将HTML标记去掉的文本

5.写入数据库
在CSDN上看到朋友们说怎么把FreeTextBox内容写入数据库中
我做了一下.就是把所有产生的HTML代码都插入数据库的一个字段中
可以做一个新闻表
news
字段ID(自增) content addtime(getdate)

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
if (!IsPostBack)
{
SqlConnection myConn = new SqlConnection(“server=(local);database=mm;uid=sa;pwd=123”);
SqlCommand myCmd = new SqlCommand(“select * from test where id=2”,myConn);
myConn.Open();
SqlDataReader myDr;
myDr=myCmd.ExecuteReader();
myDr.Read();
Response.Write(myDr[“content”].ToString());
myDr.Close();
myConn.Close();
}
}

private void Button1_Click(object sender, System.EventArgs e)
{
SqlConnection myConn = new SqlConnection(“server=(local);database=mm;uid=sa;pwd=123”);
SqlCommand myCmd = new SqlCommand(“insert into test (content) values(‘”+FreeTextBox1.Text+”‘)”,myConn);
myConn.Open();
myCmd.ExecuteNonQuery();
myConn.Close();
}

[注]web.config
在system.web节加入:
<pages validateRequest=”false”/>

—————————————————————————————————–
这里还有3.0的版本,不过是外文的哟! The no.1 free ASP.NET HTML Editor for IE and Mozilla.

FreeTextBox 3.0
FreeTextBox 3.0, with over 150,000 downloads, is the most popular cross-browser HTML editor for ASP.NET. To start using the control, do the following

Download FreeTextBox 3.0.4
Read FreeTextBox Wiki for installation instructions
Report problems to the forums
Purchase a Pro license (49) or source code/distribution license (199).
Current Version (3.0.4) Information

———另外补上一文章————————-
Freetextbox是一个免费的.net mshtml 编辑器。
我所用的免费的freetextbox版本是中文版本1.6.3的汉化的freetextbox。
获得的地址。http://www.percyboy.com/w/ftb/
下载之后仔细看看其中的说明,你就可以使用这个完美的编辑器。
其中示例是在内联代码方式下,如果在代码后置下使用Freetextbox 呢。
1、首先我们把 FreeTextBox.dll 文件copy到我们的项目中的bin目录里。
然后在我们的项目里添加新的引用,在添加引用对话框选择项目标签,浏览/选择你的FreeTextBox.dll/打开/确定。应用就添加完成了。

2、如何获得FreeTextBox.dll 中所使用到的名字空间,本中文版本1.6.3 有3个名字空间。
using FreeTextBoxControls;
using FreeTextBoxControls.Design;
using FreeTextBoxControls.Common;
可以在引用的FreeTextBox.dll 查看对象浏览。
点开树型目录就可以清晰的看到,上面所说的名字空间了。
其他的版本类似可以获得。
3、在aspx文件添加freetextbox
<%@ Register TagPrefix=”ftb” Namespace=”FreeTextBoxControls” Assembly=”FreeTextBox” %>
具体的方法和内联一样的。
同时cs文件中会有如下代码:
protected FreeTextBoxControls.FreeTextBox FreeTextBox1;产生
添加完后,运行一下就可以看到结果了。
在设计模式下我们还可以查看FreeTextBox 属性。
4、如何把FreeTextBox 内容写到数据库,我们在aspx文件中添加一个bottom
其的onclick=“my_add”
cs文件
protected void my_add(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
Response.Write(FreeTextBox1.Text);
}
此处是输出内容,可以改成我们需要方法。

—-心得——————————————————-
在使用FreeTextBox控件进行文本编辑后,进行保存时需要取编辑内容对应的HTML文本内容。
取编辑内容使用my_freetextbox.ViewStateText属性会比使用my_freetextbox.Text属性,
在后续的字符串内容处理上会方便一些。
在所取出的字符串中,系统自动加上了“\r\n”的回车换行字符串标示,在存储内容到数据库之前最
好将这些“\r\n”字符串用空串“”替换掉(如:my_str=my_str.Replace(“\r\n”,””)),否则在将
来调用时会导致不正常显示。
在所取出的字符串中,系统还把编辑文本中的双引号“用转义字符\进行了处理,如原字符串为
“wangshixin said “hello!””,所取得的字符串实际为“wangshixin said \”hello!\””,因此需要
将所获得的字符串中的全部“\””用特定的字符串替换掉。在将来提取显示时,再将特定字符串替换为
“\””(如:my_str=my_str.Replace(“\””,”wangshixin750920″))。
—–还有,再加上————————————————————————–
FreeTextBox1.Text 取得内容(带html标签的)
FreeTextBox1.HtmlStrippedText 也是取得内容(不带Html标签的)
——关于WORD中过来的内容,出错解决————————————————————
把从word复制的文本粘贴到freetextbox里,提交到数据库的时候会提示有危险代码,也就是单引号,这是为什么?
在Dottext里的freetextbox,同一篇word文档,提交时就没有问题。
我现在找到的原因是dottext里的freetextbox在提交的时候会把危险代码重新编码好像,而在我的项目里的freetextbox就不会。
查看包含freetextbox控件的页面源文件,又发现license不同,是不是有

把页面中的validateRequest指令设成false即可,或者直接改web.config:<pages validateRequest=”false” buffer=”true”/>

编写高性能WEB应用程序的10个技巧

导读:
  文章出处:CnXHacker.Net 作者: 发布时间:2005-11-03
  
  本文讨论
    常见 ASP.NET 性能难点
    面向 ASP.NET 的有用性能提示和技巧
    在 ASP.NET 中使用数据库的建议
    使用 ASP.NET 进行缓存和后台处理
  本文使用了以下技术:
  ASP.NET、.NET Framework 和 IIS
  本页内容
  数据层性能
  技巧 1 — 返回多个结果集
  技巧 2 — 分页的数据访问
  技巧 3 — 连接池
  技巧 4 — ASP.NET 缓存 API
  技巧 5 — 每请求缓存
  技巧 6 — 后台处理
  技巧 7 — 页输出缓存和代理服务器
  技巧 8 — 运行 IIS 6.0(只要用于内核缓存)
  技巧 9 — 使用 Gzip 压缩
  技巧 10 — 服务器控件视图状态
  小结
  使用 ASP.NET 编写 Web 应用程序的简单程度令人不敢相信。正因为如此简单,所以很多开发人员就不会花时间来设计其应用程序的结构,以获得更好的性能了。在本文中,我将讲述 10 个用于编写高性能 Web 应用程序的技巧。但是我并不会将这些建议仅局限于 ASP.NET 应用程序,因为这些应用程序只是 Web 应用程序的一部分。本文不作为对 Web 应用程序进行性能调整的权威性指南 — 一整本书恐怕都无法轻松讲清楚这个问题。请将本文视作一个很好的起点。
  成为工作狂之前,我原来喜欢攀岩。在进行任何大型攀岩活动之前,我都会首先仔细查看指南中的路线,阅读以前游客提出的建议。但是,无论指南怎么好,您都需要真正的攀岩体验,然后才能尝试一个特别具有挑战性的攀登。与之相似,当您面临修复性能问题或者运行一个高吞吐量站点的问题时,您只能学习如何编写高性能 Web 应用程序。
  我的个人体验来自在 Microsoft 的 ASP.NET 部门作为基础架构程序经理的经验,在此期间我运行和管理 www.ASP.NET,帮助设计社区服务器的结构,社区服务器是几个著名 ASP.NET 应用程序(组合到一个平台的 ASP.NET Forums、.Text 和 nGallery)。我确信有些曾经帮助过我的技巧对您肯定也会有所帮助。
  您应该考虑将应用程序分为几个逻辑层。您可能听说过 3 层(或者 n 层)物理体系结构一词。这些通常都是规定好的体系结构方式,将功能在进程和/或硬件之间进行了物理分离。当系统需要扩大时,可以很轻松地添加更多的硬件。但是会出现一个与进程和机器跳跃相关的性能下降,因此应该避免。所以,如果可能的话,请尽量在同一个应用程序中一起运行 ASP.NET 页及其相关组件。
  因为代码分离以及层之间的边界,所以使用 Web 服务或远程处理将会使得性能下降 20% 甚至更多。
  数据层有点与众不同,因为通常情况下,最好具有专用于数据库的硬件。然而进程跳跃到数据库的成本依然很高,因此数据层的性能是您在优化代码时首先要考虑的问题。
  在深入应用程序的性能修复问题之前,请首先确保对应用程序进行剖析,以便找出具体的问题所在。主要性能计数器(如表示执行垃圾回收所需时间百分比的计数器)对于找出应用程序在哪些位置花费了其主要时间也非常有用。然而花费时间的位置通常非常不直观。
  本文讲述了两种类型的性能改善:大型优化(如使用 ASP.NET 缓存),和进行自身重复的小型优化。这些小型优化有时特别有意思。您对代码进行一点小小的更改,就会获得很多很多时间。使用大型优化,您可能会看到整体性能的较大飞跃。而使用小型优化时,对于某个特定请求可能只会节省几毫秒的时间,但是每天所有请求加起来,则可能会产生巨大的改善。
  数据层性能
  谈到应用程序的性能调整,有一个试纸性的测试可用来对工作进行优先级划分:代码是否访问数据库?如果是,频率是怎样的?请注意,这一相同测试也可应用于使用 Web 服务或远程处理的代码,但是本文对这些内容未做讲述。
  如果某个特定的代码路径中必需进行数据库请求,并且您认为要首先优化其他领域(如字符串操作),则请停止,然后执行这个试纸性测试。如果您的性能问题不是非常严重的话,最好花一些时间来优化一下与数据库、返回的数据量、进出数据库的往返频率相关的花费时间。
  了解这些常规信息之后,我们来看一下可能会有助于提高应用程序性能的十个技巧。首先,我要讲述可能会引起最大改观的更改。
  技巧 1 — 返回多个结果集
  仔细查看您的数据库代码,看是否存在多次进入数据库的请求路径。每个这样的往返都会降低应用程序可以提供的每秒请求数量。通过在一个数据库请求中返回多个结果集,可以节省与数据库进行通信所需的总时间长度。同时因为减少了数据库服务器管理请求的工作,还会使得系统伸缩性更强。
  虽然可以使用动态 SQL 返回多个结果集,但是我首选使用存储过程。关于业务逻辑是否应该驻留于存储过程的问题还存在一些争议,但是我认为,如果存储过程中的逻辑可以约束返回数据的话(缩小数据集的大小、缩短网络上所花费时间,不必筛选逻辑层的数据),则应赞成这样做。
  使用 SqlCommand 实例及其 ExecuteReader 方法填充强类型的业务类时,可以通过调用 NextResult 将结果集指针向前移动。图 1 显示了使用类型类填充几个 ArrayList 的示例会话。只从数据库返回您需要的数据将进一步减少服务器上的内存分配。
  技巧 2 — 分页的数据访问
  ASP.NET DataGrid 具有一个很好的功能:数据分页支持。在 DataGrid 中启用分页时,一次会显示固定数量的记录。另外,在 DataGrid 的底部还会显示分页 UI,以便在记录之间进行导航。该分页 UI 使您能够在所显示的数据之间向前和向后导航,并且一次显示固定数量的记录。
  还有一个小小的波折。使用 DataGrid 的分页需要所有数据均与网格进行绑定。例如,您的数据层需要返回所有数据,那么 DataGrid 就会基于当前页筛选显示的所有记录。如果通过 DataGrid 进行分页时返回了 100,000 个记录,那么针对每个请求会放弃 99,975 个记录(假设每页大小为 25 个记录)。当记录的数量不断增加时,应用程序的性能就会受到影响,因为针对每个请求必须发送越来越多的数据。
  要编写性能更好的分页代码,一个极佳的方式是使用存储过程。图 2 显示了针对 Northwind 数据库中的 Orders 表进行分页的一个示例存储过程。简而言之,您此时要做的只是传递页索引和页大小。然后就会计算合适的结果集,并将其返回。
  在社区服务器中,我们编写了一个分页服务器控件,以完成所有的数据分页。您将会看到,我使用的就是技巧 1 中讨论的理念,从一个存储过程返回两个结果集:记录的总数和请求的数据。
  返回记录的总数可能会根据所执行查询的不同而有所变化。例如,WHERE 子句可用来约束返回的数据。为了计算在分页 UI 中显示的总页数,必须了解要返回记录的总数。例如,如果总共有 1,000,000 条记录,并且要使用一个 WHERE 子句将其筛选为 1000 条记录,那么分页逻辑就需要了解记录的总数才能正确呈现分页 UI。
  技巧 3 — 连接池
  在 Web 应用程序和 SQL Server  之间设置 TCP 连接可能是一个非常消耗资源的操作。Microsoft 的开发人员到目前为止能够使用连接池已经有一段时间了,这使得他们能够重用数据库连接。他们不是针对每个请求都设置一个新的 TCP 连接,而是只在连接池中没有任何连接时才设置新连接。当连接关闭时,它会返回连接池,在其中它会保持与数据库的连接,而不是完全破坏该 TCP 连接。
  当然,您需要小心是否会出现泄漏连接。当您完成使用连接时,请一定要关闭这些连接。再重复一遍:无论任何人对 Microsoft .NET Framework 中的垃圾回收有什么评论,请一定要在完成使用连接时针对该连接显式调用 Close 或 Dispose。不要相信公共语言运行库 (CLR) 会在预先确定的时间为您清除和关闭连接。尽管 CLR 最终会破坏该类,并强制连接关闭,但是当针对对象的垃圾回收真正发生时,并不能保证。
  要以最优化的方式使用连接池,需要遵守一些规则。首先打开连接,执行操作,然后关闭该连接。如果您必须如此的话,可以针对每个请求多次打开和关闭连接(最好应用技巧 1),但是不要一直将连接保持打开状态并使用各种不同的方法对其进行进出传递。第二,使用相同的连接字符串(如果使用集成身份验证的话,还要使用相同的线程标识)。如果不使用相同的连接字符串,例如根据登录的用户自定义连接字符串,那么您将无法得到连接池提供的同一个优化值。如果您使用集成身份验证,同时还要模拟大量用户,连接池的效率也会大大下降。尝试跟踪与连接池相关的任何性能问题时,.NET CLR 数据性能计数器可能非常有用。
  每当应用程序连接资源时,如在另一个进程中运行的数据库,您都应该重点考虑连接该资源所花时间、发送或检索数据所花时间,以及往返的数量,从而进行优化。优化应用程序中任何种类的进程跳跃都是获得更佳性能的首要一点。
  应用层包含了连接数据层、将数据转换为有意义类实例和业务流程的逻辑。例如社区服务器,您要在其中填充Forums 或 Threads集合,应用业务规则(如权限);最重要的是要在其中执行缓存逻辑。
  技巧 4 — ASP.NET 缓存 API
  编写应用程序代码行之前,一个首要完成的操作是设计应用层的结构,以便最大化利用 ASP.NET 缓存功能。
  如果您的组件要在 ASP.NET 应用程序中运行,则只需在该应用程序项目中包括一个 System.Web.dll 引用。当您需要访问该缓存时,请使用 HttpRuntime.Cache 属性(通过 Page.Cache 和 HttpContext.Cache 也可访问这个对象)。
  对于缓存数据,有几个规则。首先,如果数据可能会多次使用时,则这是使用缓存的一个很好的备选情况。第二,如果数据是通用的,而不特定于某个具体的请求或用户时,则也是使用缓存的一个很好的备选情况。如果数据是特定于用户或请求的,但是寿命较长的话,仍然可以对其进行缓存,但是这种情况可能并不经常使用。第三,一个经常被忽略的规则是,有时可能您缓存得太多。通常在一个 x86 计算机上,为了减少内存不足错误出现的机会,您会想使用不高于 800MB 的专用字节运行进程。因此缓存应该有个限度。换句话说,您可能能够重用某个计算结果,但是如果该计算采用 10 个参数的话,您可能要尝试缓存 10 个排列,这样有可能给您带来麻烦。一个要求 ASP.NET 的最常见支持是由于过度缓存引起的内存不足错误,尤其是对于大型数据集。
  图 3 ASP.NET缓存
  缓存有几个极佳的功能,您需要对它们有所了解。首先,缓存会实现最近最少使用的算法,使得 ASP.NET 能够在内存运行效率较低的情况下强制缓存清除 - 从缓存自动删除未使用过的项目。第二,缓存支持可以强制失效的过期依赖项。这些依赖项包括时间、密钥和文件。时间经常会用到,但是对于 ASP.NET 2.0,引入了一个功能更强的新失效类型:数据库缓存失效。它指的是当数据库中的数据发生变化时自动删除缓存中的项。有关数据库缓存失效的详细信息,请参阅 MSDN Magazine 2004 年 7 月的 Dino Esposito Cutting Edge 专栏。要了解缓存的体系结构,请参阅图 3。
  技巧 5 — 每请求缓存
  在本文前面部分,我提到了经常遍历代码路径的一些小改善可能会导致较大的整体性能收益。对于这些小改善,其中有一个绝对是我的最爱,我将其称之为“每请求缓存”。
  缓存 API 的设计目的是为了将数据缓存较长的一段时间,或者缓存至满足某些条件时,但每请求缓存则意味着只将数据缓存为该请求的持续时间。对于每个请求,要经常访问某个特定的代码路径,但是数据却只需提取、应用、修改或更新一次。这听起来有些理论化,那么我们来举一个具体的示例。
  在社区服务器的论坛应用程序中,页面上使用的每个服务器控件都需要个性化的数据来确定使用什么外观、使用什么样式表,以及其他个性化数据。这些数据中有些可以长期缓存,但是有些数据却只针对每个请求提取一次,然后在执行该请求期间对其重用多次,如要用于控件的外观。
  为了达到每请求缓存,请使用 ASP.NET HttpContext。对于每个请求,都会创建一个 HttpContext 实例,在该请求期间从 HttpContext.Current 属性的任何位置都可访问该实例。该 HttpContext 类具有一个特殊的 Items 集合属性;添加到此 Items 集合的对象和数据只在该请求持续期间内进行缓存。正如您可以使用缓存来存储经常访问的数据一样,您也可以使用 HttpContext.Items 来存储只基于每个请求使用的数据。它背后的逻辑非常简单:数据在它不存在的时候添加到 HttpContext.Items 集合,在后来的查找中,只是返回 HttpContext.Items 中的数据。
  技巧 6 — 后台处理
  通往代码的路径应该尽可能快速,是吗?可能有时您会觉得针对每个请求执行的或者每 n 个请求执行一次的任务所需资源非常多。发送电子邮件或者分析和验证传入数据就是这样的一些例子。
  剖析 ASP.NET Forums 1.0 并重新构建组成社区服务器的内容时,我们发现添加新张贴的代码路径非常慢。每次添加新张贴时,应用程序首先需要确保没有重复的张贴,然后必须使用“坏词”筛选器分析该张贴,分析张贴的字符图释,对张贴添加标记并进行索引,请求时将张贴添加到合适的队列,验证附件,最终张贴之后,立即向所有订阅者发出电子邮件通知。很清楚,这涉及很多操作。
  经研究发现,大多数时间都花在了索引逻辑和发送电子邮件上。对张贴进行索引是一个非常耗时的操作,人们发现内置的 System.Web.Mail 功能要连接 SMYP 服务器,然后连续发送电子邮件。当某个特定张贴或主题领域的订阅者数量增加时,执行 AddPost 功能所需的时间也越来越长。
  并不需要针对每个请求都进行电子邮件索引。理想情况下,我们想要将此操作进行批处理,一次索引 25 个张贴或者每五分钟发送一次所有电子邮件。我们决定使用以前用于对数据缓存失效进行原型设计的代码,这个失效是用于最终进入 Visual Studio  2005 的内容的。
  System.Threading 命名空间中的 Timer 类非常有用,但是在 .NET Framework 中不是很有名,至少对于 Web 开发人员来说是这样。创建之后,这个 Timer 类将以一个可配置的间隔针对 ThreadPool 中的某个线程调用指定的回调。这就表示,您可以对代码进行设置,使其能够在没有对 ASP.NET 应用程序进行传入请求的情况下得以执行,这是后台处理的理想情况。您还可以在此后台进程中执行如索引或发送电子邮件之类的操作。
  但是,这一技术有几个问题。如果应用程序域卸载,该计时器实例将停止触发其事件。另外,因为 CLR 对于每个进程的线程数量具有一个硬性标准,所以可能会出现这样的情形:服务器负载很重,其中计时器可能没有可在其基础上得以完成的线程,在某种程度上可能会造成延迟。ASP.NET 通过在进程中保留一定数量的可用线程,并且仅使用总线程的一部分用于请求处理,试图将上述情况发生的机会降到最低。但是,如果您具有很多异步操作时,这可能就是一个问题了。
  这里没有足够的空间来放置该代码,但是您可以下载一个可以看懂的示例,网址是 www.rob-howard.net。请了解一下 Blackbelt TechEd 2004 演示中的幻灯片和演示。
  技巧 7 — 页输出缓存和代理服务器
  ASP.NET 是您的表示层(或者说应该是您的表示层);它由页、用户控件、服务器控件(HttpHandlers 和 HttpModules)以及它们生成的内容组成。如果您具有一个 ASP.NET 页,它会生成输出(HTML、XML、图像或任何其他数据),并且您针对每个请求运行此代码时,它都会生成相同的输出,那么您就拥有一个可用于页输出缓存的绝佳备选内容。
  将此行内容添加页的最上端
  
  就可以高效地为此页生成一次输出,然后对它进行多次重用,时间最长为 60 秒,此时该页将重新执行,输出也将再一次添加到 ASP.NET 缓存。通过使用一些低级程序化 API 也可以完成此行为。对于输出缓存有几个可配置的设置,如刚刚讲到的 VaryByParams 属性。VaryByParams 刚好被请求到,但还允许您指定 HTTP GET 或 HTTP POST 参数来更改缓存项。例如,只需设置 VaryByParam=”Report” 即可对 default.aspx Report=1 或 default.aspx Report=2 进行输出缓存。通过指定一个以分号分隔的列表,还可以指定其他参数。
  很多人都不知道何时使用输出缓存,ASP.NET 页还会生成一些位于缓存服务器下游的 HTTP 标头,如 Microsoft Internet Security and Acceleration Server 或 Akamai 使用的标头。设置了 HTTP 缓存标头之后,可以在这些网络资源上对文档进行缓存,客户端请求也可在不必返回原始服务器的情况下得以满足。
  因此,使用页输出缓存不会使得您的应用程序效率更高,但是它可能会减少服务器上的负载,因为下游缓存技术会缓存文档。当然,这可能只是匿名内容;一旦它成为下游之后,您就再也不会看到这些请求,并且再也无法执行身份验证以阻止对它的访问了。
  技巧 8 — 运行 IIS 6.0(只要用于内核缓存)
  如果您未运行 IIS 6.0 (Windows Server  2003),那么您就错过了 Microsoft Web 服务器中的一些很好的性能增强。在技巧 7 中,我讨论了输出缓存。在 IIS 5.0 中,请求是通过 IIS 然后进入 ASP.NET 的。涉及到缓存时,ASP.NET 中的 HttpModule 会接收该请求,并返回缓存中的内容。
  如果您正在使用 IIS 6.0,就会发现一个很好的小功能,称为内核缓存,它不需要对 ASP.NET 进行任何代码更改。当请求由 ASP.NET 进行输出缓存时,IIS 内核缓存会接收缓存数据的一个副本。当请求来自网络驱动程序时,内核级别的驱动程序(无上下文切换到用户模式)就会接收该请求,如果经过了缓存,则会将缓存的数据刷新到响应,然后完成执行。这就表示,当您将内核模式缓存与 IIS 和 ASP.NET 输出缓存一起使用时,就会看到令人不敢相信的性能结果。在 ASP.NET 的 Visual Studio 2005 开发过程中,我一度是负责 ASP.NET 性能的程序经理。开发人员完成具体工作,但是我要看到每天进行的所有报告。内核模式缓存结果总是最有意思的。最常见的特征是网络充满了请求/响应,而 IIS 运行时的 CPU 使用率只有大约 5%。这太令人震惊了!当然使用 IIS 6.0 还有一些其他原因,但是内核模式缓存是其中最明显的一个。
  技巧 9 — 使用 Gzip 压缩
  虽然使用 gzip 并不一定是服务器性能技巧(因为您可能会看到 CPU 使用率的提高),但是使用 gzip 压缩可以减少服务器发送的字节数量。这就使人们觉得页速度加快了,并且还减少了带宽的用量。根据所发送数据、可以压缩的程度以及客户端浏览器是否支持(IIS 只会向支持 gzip 压缩的客户端发送经过 gzip 压缩的内容,如 Internet Explorer 6.0 和 Firefox),您的服务器每秒可以服务于更多的请求。实际上,几乎每当您减少所返回数据的数量时,都会增加每秒请求数。
  Gzip 压缩已经内置到 IIS 6.0 中,并且其性能比 IIS 5.0 中使用的 gzip 压缩要好的多,这是好消息。但不幸的是,当尝试在 IIS 6.0 中打开 gzip 压缩时,您可能无法在 IIS 的属性对话中找到该设置。IIS 小组在该服务器中置入了卓越的 gzip 功能,但是忘了包括一个用于启用该功能的管理 UI。要启用 gzip 压缩,您必须深入到 IIS 6.0 的 XML 配置设置内部(这样不会引起心脏虚弱)。顺便提一句,这归功于 OrcsWeb 的 Scott Forsyth,他帮助我提出了在 OrcsWeb 上宿主的 www.asp.net 服务器的这个问题。
  本文就不讲述步骤了,请阅读 Brad Wilson 的文章,网址是 IIS6 Compression。还有一篇有关为 ASPX 启用压缩的知识库文章,网址是 Enable ASPX Compression in IIS。但是您应该注意,由于一些实施细节,IIS 6.0 中不能同时存在动态压缩和内核缓存。
  技巧 10 — 服务器控件视图状态
  视图状态是一个有趣的名称,用于表示在所生成页的隐藏输出字段中存储一些状态数据的 ASP.NET。当该页张贴回服务器时,服务器可以分析、验证、并将此视图状态数据应用回该页的控件树。视图状态是一个非常强大的功能,因为它允许状态与客户端一起保持,并且它不需要 cookie 或服务器内存即可保存此状态。很多 ASP.NET 服务器控件都使用视图状态来保持在与页元素进行交互期间创建的设置,例如保存对数据进行分页时显示的当前页。
  然而使用视图状态也有一些缺点。首先,服务或请求页时,它都会增加页的总负载。对张贴回服务器的视图状态数据进行序列化或取消序列化时,也会发生额外的开销。最后,视图状态会增加服务器上的内存分配。
  几个服务器控件有着过度使用视图状态的趋势,即使在并不需要的情况下也要使用它,其中最著名的是 DataGrid。ViewState 属性的默认行为是启用,但是如果您不需要,则可以在控件或页级别关闭。在控件内,只需将 EnableViewState 属性设置为 false,或者在页中使用下列设置即可对其进行全局设置:
  
  如果您不回发页,或者总是针对每个请求重新生成页上的控件,则应该在页级别禁用视图状态。
  小结
  我为您讲述了一些我认为在编写高性能 ASP.NET 应用程序时有所帮助的技巧。正如我在本文前面部分提到的那样,这是一个初步指南,并不是 ASP.NET 性能的最后结果。(有关改善 ASP.NET 应用程序性能的信息,请参阅 Improving ASP.NET Performance。)只有通过自己的亲身体验才能找出解决具体性能问题的最好方法。但是,在您的旅程中,这些技巧应该会为您提供一些好的指南。在软件开发中,几乎没有绝对的东西;每个应用程序都是唯一的。

本文转自
http://hi.baidu.com/superyhao/blog/item/80cd8b1870dd96b44bedbc18.html

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