在设计模式,用到了反射,顺便也研究了一下C#的反射机制。收集了网上的一些资料和我个人的理解,供大家学习
       C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: 
 System.Reflection命名空间
(1)   AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器
(2)   Assembly:程序集类
(3)   Module:模块类
(4)   Type:使用反射得到类型信息的最核心的类
他们之间是一种从属关系,也就是说,一个AppDomain可以包含NAssembly,一个Assembly可以包含NModule,而一个Module可以包含NType. AppDomain这个类我们等下再来讲解。我们先关注Assembly个类,在程序中,如果我们要动态加载一个程序集怎么办呢?有几种方式可以使用,分别是Load,LoadFromLoadWithPartialName三个Assembly的静态方法.
        先来讲解Assembly.Load方法,该方法会有多个重载版本,其中一个就是提供程序集的详细信息,即程序集的标识,包括程序集的名称,版本,区域信息,公有密钥标记,全部都是以一个字符串的形式提供,例如:"MyAssembly,Version=1.0.0.0,culture=zh-CN,PublicKeyToken=47887f89771bc57f”.
              那么,使用Assembly.Load加载程序集的顺序是怎样的呢?首先它会去全局程序集缓存查找,然后到应用程序的根目录查找,最后会到应用程序的私有路径查找。
              当然,如果你使用的是弱命名程序集,也即只给出程序集的名称,那么这个时候,CLR将不会在程序集上应用任何安全或者部署策略,而且Load也不会到全局缓存程序集中查找程序集。
Assembly.Load("")的使用说明如下;  
  并不是命名空间。常用的是程序集名称,也就是dll的名称  
    重载列表    
  名称     说明      
  Assembly.Load   (AssemblyName)     在给定程序集的   AssemblyName   的情况下,加载程序集。    
  由   .NET   Compact   Framework   支持。     
  Assembly.Load   (Byte[])     加载带有基于通用对象文件格式   (COFF)   的图像的程序集,该图像包含已发出的程序集。将该程序集加载到调用方的域。      
  Assembly.Load   (String)     通过给定程序集的长格式名称加载程序集。 
  由   .NET   Compact   Framework   支持。     
  Assembly.Load   (AssemblyName,   Evidence)     在给定程序集的   AssemblyName   的情况下,加载程序集。使用提供的证据将该程序集加载到调用方的域中。      
  Assembly.Load   (Byte[],   Byte[])     加载带有基于通用对象文件格式   (COFF)   的图像的程序集,该图像包含已发出的程序集。      
  Assembly.Load   (String,   Evidence)     通过给定的程序集的显示名称来加载程序集,使用提供的证据将程序集加载到调用方的域中。
  Assembly.Load   (Byte[],   Byte[],   Evidence)     加载带有基于通用对象文件格式   (COFF)   的图像的程序集,该图像包含已发出的程序集。

关于反射Assembly.Load("程序集").CreateInstance("命名空间.类")
而不管在哪一层写这段代码其中的("程序集")读取的实际是web层bin文件夹下的dll,也就是说你反射的类的程序集dll在web层的bin下必须有
注意CreateInstance()一定是命名空间.类名,否则创建的实例为空
Assembly.Load("程序集名")
Assembly.LoadFrom("程序集实际路径")

posted @ 2011-05-03 16:55 pig_wang 阅读(167) 评论(0) 编辑
在设计模式,用到了反射,顺便也研究了一下C#的反射机制。收集了网上的一些资料和我个人的理解,供大家学习
       C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: 
 System.Reflection命名空间
(1)   AppDomain:应用程序域,可以将其理解为一组程序集的逻辑容器
(2)   Assembly:程序集类
(3)   Module:模块类
(4)   Type:使用反射得到类型信息的最核心的类
他们之间是一种从属关系,也就是说,一个AppDomain可以包含NAssembly,一个Assembly可以包含NModule,而一个Module可以包含NType. AppDomain这个类我们等下再来讲解。我们先关注Assembly个类,在程序中,如果我们要动态加载一个程序集怎么办呢?有几种方式可以使用,分别是Load,LoadFromLoadWithPartialName三个Assembly的静态方法.
        先来讲解Assembly.Load方法,该方法会有多个重载版本,其中一个就是提供程序集的详细信息,即程序集的标识,包括程序集的名称,版本,区域信息,公有密钥标记,全部都是以一个字符串的形式提供,例如:"MyAssembly,Version=1.0.0.0,culture=zh-CN,PublicKeyToken=47887f89771bc57f”.
              那么,使用Assembly.Load加载程序集的顺序是怎样的呢?首先它会去全局程序集缓存查找,然后到应用程序的根目录查找,最后会到应用程序的私有路径查找。
              当然,如果你使用的是弱命名程序集,也即只给出程序集的名称,那么这个时候,CLR将不会在程序集上应用任何安全或者部署策略,而且Load也不会到全局缓存程序集中查找程序集。
Assembly.Load("")的使用说明如下;  
  并不是命名空间。常用的是程序集名称,也就是dll的名称  
    重载列表    
  名称     说明      
  Assembly.Load   (AssemblyName)     在给定程序集的   AssemblyName   的情况下,加载程序集。    
  由   .NET   Compact   Framework   支持。     
  Assembly.Load   (Byte[])     加载带有基于通用对象文件格式   (COFF)   的图像的程序集,该图像包含已发出的程序集。将该程序集加载到调用方的域。      
  Assembly.Load   (String)     通过给定程序集的长格式名称加载程序集。 
  由   .NET   Compact   Framework   支持。     
  Assembly.Load   (AssemblyName,   Evidence)     在给定程序集的   AssemblyName   的情况下,加载程序集。使用提供的证据将该程序集加载到调用方的域中。      
  Assembly.Load   (Byte[],   Byte[])     加载带有基于通用对象文件格式   (COFF)   的图像的程序集,该图像包含已发出的程序集。      
  Assembly.Load   (String,   Evidence)     通过给定的程序集的显示名称来加载程序集,使用提供的证据将程序集加载到调用方的域中。
  Assembly.Load   (Byte[],   Byte[],   Evidence)     加载带有基于通用对象文件格式   (COFF)   的图像的程序集,该图像包含已发出的程序集。

关于反射Assembly.Load("程序集").CreateInstance("命名空间.类")
而不管在哪一层写这段代码其中的("程序集")读取的实际是web层bin文件夹下的dll,也就是说你反射的类的程序集dll在web层的bin下必须有
注意CreateInstance()一定是命名空间.类名,否则创建的实例为空
Assembly.Load("程序集名")
Assembly.LoadFrom("程序集实际路径")

posted @ 2011-05-03 16:53 pig_wang 阅读(267) 评论(0) 编辑
1、收藏本站
1 <span style="CURSOR: hand" onClick="window.external.addFavorite('http://www.cosy.80.hk','温馨园')" title="温馨园">收藏本站</span>

2、设为首页

<span onclick="var strHref=window.location.href;this.style.behavior='url(#default#homepage)';this.setHomePage('http://www.pfan.80.hk');" style="CURSOR: hand">设为首页</span>

3、去掉超链接的下划线

<style TYPE="text/css">
<!--
A:link{text-decoration:none}
A:visited{text-decoration:none}
A:hover {color: #ff00ff;text-decoration:underline}
-->
</style>

4、点击即可刷新本页

<a href="location.reload()" target="_self">刷新</a>

5、用户离开时启动收藏夹

第一步:把如下代码加入<head>到</head>区域中
<script language="javascript">
function bookmark(){
window.external.AddFavorite('http://joybbs.bokee.com', '程序爱好者')
}
</script>

第二步:把<body>中内容改为:
<body bgcolor="#fef4d9" onunload="bookmark()">

 

6、JS发送邮件

以下代码加入<head>区域:

<SCRIPT LANGUAGE="JavaScript">

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://www.skycx.com -->

<!-- Begin
function mailsome1(){
who=prompt("输入Email地址: ","lydi@skycx.com");
what=prompt("输入邮件主题: ","none");
if (confirm("你是真的要发送邮件给 "+who+" 主题是 "+what+"?")==true){
parent.location.href='mailto:'+who+'?subject='+what+'';
   }
}
// End -->
</SCRIPT>

以下代码加入<body>区域:

<a href='javascript:mailsome1()'>发送Email给某人!</a>
<FORM>
<input type=button value="发送Email给某人!" onClick="mailsome1()">
</FORM>

2. <A HREF="mailto:xxx@xxx.com">xxxxx</a>

 

7.JS时间

<script language="javascript">
setInterval("jnkc.innerHTML=new Date().toLocaleString()+''.charAt(new Date().getDay());",1000);
</script>

<span id=jnkc></span>

8.js复制代码

<!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>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Js复制代码</title>
</head>
<body>
<p>
<input type="button" name="anniu1" onClick='copyToClipBoard()' value="复制专题地址和url地址,传给QQ/MSN上的好友">
<script language="javascript">
   function copyToClipBoard(){
    var clipBoardContent="";
    clipBoardContent+=document.title;
    clipBoardContent+="";
    clipBoardContent+=this.location.href;
    window.clipboardData.setData("Text",clipBoardContent);
    alert("复制成功,请粘贴到你的QQ/MSN上推荐给你的好友");
}
</script>  
<br />
<br />

直接复制url
<input type="button" name="anniu2" onClick='copyUrl()' value="复制URL地址">
<script language="javascript">
   function copyUrl()
   {
    var clipBoardContent=this.location.href;
    window.clipboardData.setData("Text",clipBoardContent);
    alert("复制成功!");
   }
</script>
<br/>
<br/>
点击文本框时,复制文本框里面的内容
<input onclick="oCopy(this)" value="你好.要copy的内容!">
<script language="javascript">
function oCopy(obj){
obj.select();
js=obj.createTextRange();
js.execCommand("Copy")
alert("复制成功!");
}
</script>
<br />
<br />
复制文本框或者隐藏域中的内容
<script language="javascript">
function CopyUrl(target){
target.value=myimg.value;
target.select();  
js=myimg.createTextRange();  
js.execCommand("Copy");
alert("复制成功!");
}
function AddImg(target){
target.value="[IMG]"+myimg.value+"[/ img]";
target.select();
js=target.createTextRange();  
js.execCommand("Copy");
alert("复制成功!");
}
</script>

<input name=myimg type=hidden id=myimg value="http://pmp.cnblogs.com" />
<input name=imgurl type=text size=32 value="http://pmp.cnblogs.com" />
<input type=button value="点击这里复制本站地址" onclick="CopyUrl(imgurl);" />
<br />
<br/>
复制span标记中的内容
<script type="text/javascript">
</script>
<br />
<br />
<script type="text/javascript">function copyText(obj)  
{
var rng = document.body.createTextRange();
rng.moveToElementText(obj);
rng.scrollIntoView();
rng.select();
rng.execCommand("Copy");
rng.collapse(false);
alert("复制成功!");
}
</script>

以下是代码片段:<br />
<br />
<span id="tbid">http://pmp.cnblogs.com</span>  
[<a href="#" onclick="copyText(document.all.tbid)">点击复制</a>]<br/><br/>
<span id="tbid2">http://www.cnblogs.com/pmp</span>  
[<a href="#" onclick="copyText(document.all.tbid2)">点击复制</a>]<br/><br/>

</p>
</body>
</html>

网页在线发送电子邮件JS代码

以下代码加入<head>区域:

<SCRIPT LANGUAGE="JavaScript">

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://www.skycx.com -->

<!-- Begin
function mailsome1(){
who=prompt("输入Email地址: ","lydi@skycx.com");
what=prompt("输入邮件主题: ","none");
if (confirm("你是真的要发送邮件给 "+who+" 主题是 "+what+"?")==true){
parent.location.href='mailto:'+who+'?subject='+what+'';
   }
}
// End -->
</SCRIPT>

以下代码加入<body>区域:

<a href='javascript:mailsome1()'>发送Email给某人!</a>
<FORM>
<input type=button value="发送Email给某人!" onClick="mailsome1()">
</FORM>

posted @ 2010-08-09 09:41 pig_wang 阅读(246) 评论(0) 编辑

今天工作中遇到JavaScript 中的一个 this.x!=“1”希望以后再有碰到this.这样的关键字能明白是怎么回事

  如图:

 

下面的列举当然不是图中的,也是我收集到的一点简单的讲解。便于大家理解应用。

this是Javascript语言的一个关键字。它代表函数运行时,自动生成的一个内部对象,只能在函数内部使用。比如,
  function test(){
    this.x = 1;
  }
随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。
下面分四种情况,详细讨论this的用法。
情况一:纯粹的函数调用
这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。

请看下面这段代码,它的运行结果是1。

  function test(){

    this.x = 1;
    alert(this.x);
  }
  test(); // 1
为了证明this就是全局对象,我对代码做一些改变:
  var x = 1;
  function test(){
    alert(this.x);
  }
  test(); // 1
运行结果还是1。再变一下:
  var x = 1;
  function test(){
    this.x = 0;
  }
  test();
  alert(x); //0

情况二:作为对象方法的调用

函数还可以作为某个对象的方法调用,这时this就指这个上级对象。
  function test(){
    alert(this.x);
  }
  var o = {};
  o.x = 1;
  o.m = test;
  o.m(); // 1

情况三 作为构造函数调用

所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。
  function test(){
    this.x = 1;
  }
  var o = new test();
  alert(o.x); // 1
运行结果为1。为了表明这时this不是全局对象,我对代码做一些改变:
  var x = 2;
  function test(){
    this.x = 1;
  }
  var o = new test();
  alert(x); //2
运行结果为2,表明全局变量x的值根本没变。

情况四 apply调用

apply()是函数对象的一个方法,它的作用是改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。
  var x = 0;
  function test(){
    alert(this.x);
  }
  var o={};
  o.x = 1;
  o.m = test;
  o.m.apply(); //0
apply()的参数为空时,默认调用全局对象。因此,这时的运行结果为0,证明this指的是全局对象。
如果把最后一行代码修改为
  o.m.apply(o); //1
运行结果就变成了1,证明了这时this代表的是对象o。

 
posted @ 2010-08-04 17:45 pig_wang 阅读(152) 评论(2) 编辑

 今天改shtml模板页时遇到问题,用到#include file 和 #include virtual  在这区别下以方便新手查阅。

#include file 和 #include virtual的区别,介绍这方面的文章也有不少,在此将二者的区别再总结一下,仅供参考:
1。#include file 包含文件的相对路径,#include virtual包含文件的虚拟路径。
2。在同一个虚拟目录内,<!--#include file="file.asp"-->和<!--#include virtual="file.asp"-->效果是相同的,但假设虚拟目录名为myweb,则<!--#include virtual="myweb/file.asp"-->也可以通过调试,但我们知道<!--#include file="myweb/file.asp"-->是绝对要报错的。
3。如果一个站点下有2个虚拟目录myweb1和myweb2,myweb1下有文件file1.asp,myweb2下有文件file2.asp,如果file1.asp要调用file2.asp,那么在file1.asp中要这样写:<!--#include virtual="myweb2/file2.asp"-->,在这种情况下用#include file是无法实现的,用<!--#include file="myweb2/file2.asp"-->必然报错。相反,在myweb2的文件中包含myweb1中的文件也是一样。如果该被包含文件在某个文件夹下面,只要在虚拟路径中加上该文件夹即可。
4。不论用#include file 还是 #include virtual,在路径中用“/”还是“\”或者二者交叉使用都不会影响编译效果,程序会顺利执行。
5。以上情况不适用于2个站点文件的相互调用,而且在同一个站点内,<!--#include file="file.asp"-->和<!--#include virtual="file.asp"-->等效,但假设站点名为website,使用<!--#include virtual="website/file.asp"-->是错误的。
posted @ 2010-07-23 11:28 pig_wang 阅读(199) 评论(0) 编辑

最近在做调用SHtml模板生成静态页面的项目二次开发,找了点相关的资料。自己也在研究

生成sHTML静态页面,同时调用模板,便于修改。
过程如下:
<%
Action=Trim(Request("Action"))
'变量ACTION=1为新增,ACTION=0为修改
title=Trim(Request("title"))
content=Trim(Request("content"))
'....更多内容来源

if Action=0 then

'修改sHTML文件
id=Trim(Request("id"))
'指定修改的文章
response.buffer=true
Response.Expires=0
'清除缓存
set rs=server.createobject("adodb.recordset")
sql = "Select url From Docs where id="&id
rs.Open sql,conn,1,1
if not(rs.eof and rs.bof) then
filepath =rs("url")
'读取文章路径
end if
StaticFilePath = filepath
'设定另一变量后用。
filepath=replace(filepath,".shtml","")
'转换文件名后缀
filepath="/a/"&filepath
'得到完整文件路径
else

'生成新sHTML文件

   d=year(date())&month(date())&date(date())
   t=hour(now())&minute(now())&second(now())
   randomize
   '使用系统计时器来初始化乱数产生器
   t=rnd(t)

StaticFilePath= d &"/"& d & t &".shtml"
folder = "/a/"& d &"/"
'存储在数据库中的路径,文件夹a为自定
filepath = folder&t
'得到完整文件路径
end if


'保存数据到数据库
set rs=server.createobject("adodb.recordset")
sql = "Select * From ......"
'.............
'过程不是这部份的,省略

ContentStr=split(Content,"|||")
'查找内容中的分页符
PageNumber=ubound(ContentStr)
For p = 0 to ubound(ContentStr)

Dim fso,fin
'创建文件系统对象
Set fso=Server.CreateObject("Scripting.FileSystemObject")
Model="/a/Template/index.shtml"
'sHTML模板文件路径
Set fin=fso.OpenTextFile(Server.MapPath(""&Model&""))
mb_code=fin.ReadAll
fin.close
'打开模板代码,

' REM 转换其中特殊代码转变为接受值 开始
mb_code=replace(mb_code,"$$Pagename$$",Pagename)
mb_code=replace(mb_code,"$$Title$$",Title)
mb_code=replace(mb_code,"$$Posttime$$",now())
mb_code=replace(mb_code,"$$PinlunContent$$",PinlunContent)
mb_code=replace(mb_code,"$$Content$$",ContentStr(p))

if PageNumber>0 then
If p = 0 and p < PageNumber Then
'分页数大于一时
'生成图片翻页链接 开始
MyPagerTable="<div align=center><a href=""$UrlDown$""><img src=""/images/page_down.gif"" width=""69"" height=""21"" border=""0"" /></a></div>"
MyPagerTable=replace(MyPagerTable,"$UrlDown$",fname&"_"&p+1&".shtml")
ElseIf p = 1 and p < PageNumber Then
MyPagerTable="<div align=center><a href=""$UrlUp$""><img src=""/images/page_up.gif"" width=""69"" height=""21"" border=""0"" /></a> <a href=""$UrlDown$""><img src=""/images/page_down.gif"" width=""69"" height=""21"" border=""0"" /></a></div>"
MyPagerTable=replace(MyPagerTable,"$UrlUp$",fname&".shtml")
MyPagerTable=replace(MyPagerTable,"$UrlDown$",fname&"_"&p+1&".shtml")
Elseif p = 1 and p = PageNumber Then
MyPagerTable="<div align=center><a href=""$UrlUp$""><img src=""/images/page_up.gif"" width=""69"" height=""21"" border=""0"" /></a></div>"
MyPagerTable=replace(MyPagerTable,"$UrlUp$",fname&".shtml")
Elseif p = PageNumber Then
MyPagerTable="<div align=center><a href=""$UrlUp$""><img src=""/images/page_up.gif"" width=""69"" height=""21"" border=""0"" /></a></div>"
MyPagerTable=replace(MyPagerTable,"$UrlUp$",fname&"_"&p-1&".shtml")
else
MyPagerTable="<div align=center><a href=""$UrlUp$""><img src=""/images/page_up.gif"" width=""69"" height=""21"" border=""0"" /></a> <a href=""$UrlDown$""><img src=""/images/page_down.gif"" width=""69"" height=""21"" border=""0"" /></a></div>"
MyPagerTable=replace(MyPagerTable,"$UrlUp$",fname&"_"&p-1&".shtml")
MyPagerTable=replace(MyPagerTable,"$UrlDown$",fname&"_"&p+1&".shtml")   
End If
'生成图片翻页链接 结束
mb_code=replace(mb_code,"$$MyPager$$",MyPagerTable)
'转换分页代码
else
mb_code=replace(mb_code,"$$MyPager$$","")
'只有一页时,分页代码为空
end if

'开始生成sHTML页面
On Error Resume Next
'容错处理
if Action=0 then
Set fs = Server.CreateObject("Scripting.FileSystemObject")
   if p=0 then
   File = Server.MapPath(filepath&".shtml")
   else
   File = Server.MapPath(filepath&"_"&p&".shtml")
   end if
On Error Resume Next
' 若有错误依然向下执行
fs.DeleteFile File, True
end if
fso.CreateFolder(Server.MapPath(folder))
if p=0 then
Set fout = fso.CreateTextFile(Server.MapPath(filepath&".shtml"))
else
Set fout = fso.CreateTextFile(Server.MapPath(filepath&"_"&p&".shtml"))
end if
fout.WriteLine mb_code
fout.close
next

Response.Write("完成任务。")
%>

关于模板文件index.shtml的内容按HTML设计好即可,注意要转换的内容中使用转换标识符。
shtml文件可使用include file包含另一文件,但不能运行ASP等动态内容

posted @ 2010-07-23 09:23 pig_wang 阅读(534) 评论(0) 编辑
摘要: 语法:oElement = document . getElementById ( sID ) 参数:sID――必选项。字符串 (String) 。 返回值:oElemen――对象 (Element) 。 说明:根据指定的 id 属性值得到对象。返回 id 属性值等于 sID 的第一个对象的引用。假如对应的为一组对象,则返回该组对象中的第一个。 如果无符合条件的对象,则返回 null 。 注意: ...阅读全文
posted @ 2010-07-21 16:56 pig_wang 阅读(1185) 评论(0) 编辑
摘要: GridView中显示时间日期格式问题以下都是基本常用的日期,时间格式形式语法结果 注释数字{0:N2}12.36 数字{0:N0}13 货币{0:c2}$12.36 货币{0:c4}$12.3656 货币 "¥{0:N2}" ¥12.36 科学计数法 {0:E3}1.23E+001 百分数{0:P}12.25% P and p present the same.日期{0:D}2006年11月25...阅读全文
posted @ 2010-07-13 15:39 pig_wang 阅读(639) 评论(2) 编辑
摘要: 方法一: 第一步: 打开 查询分析器 输入 sp_password null,'sa','sa的密码' 并运行 运行的结果是把sa帐户的密码修改了。 第二步: 然后打开 企业管理器 找到你的SQL注册组(就是SQl Server组下面那个),右击找到 安全性 - 安全性 -身份验证 选择第一个SQL Server和Windows(S) 然后确定。(启用Sql server 和 windows验证...阅读全文
posted @ 2010-07-06 10:14 pig_wang 阅读(1919) 评论(3) 编辑
摘要: varchar在SQL Server中是采用单字节来存储数据的,nvarchar是使用Unico来存储数据的.中文字符存储到SQL Server中会保存为两个字节(一般采用Unico编码),英文字符保存到数据库中,如果字段的类型为varchar,则只会占用一个字节,而如果字段 的类型为nvarchar,则会占用两个字节. 正常情况下,我们使用varchar也可以存储中文字符,但是如果遇到操作系统是...阅读全文
posted @ 2010-06-23 19:42 pig_wang 阅读(856) 评论(2) 编辑