C#开发积累从学习C#以来的经验积累

来源:m.fanwen118.com时间:2022.7.31

Net学习

1。对象一直是Windows开发环境中,程序开发的中心。不论在VB、VBA、VC++、VBScript等,都是如此,不同的开发环境有不同的对象,这些对象均是各个语法所提供的的"资源",程序开发人员可以利用这些资源,来编写所需的系统,就象我们在盖房屋的一样,建筑师使用使用同样的素材,然而盖好的房子可能不尽相同。

在过去的SP中,仅有Server、Request、Response?等七个对象。而在ASP.NET的对象库中却分得很细。

例如在ASP.NET网页中要通过SQL语句获得数据库中的数据,必须使用"System.Data.SQL",这是NameSpace名称。 在System.Data.SQL下,又有很多类(Class)。每个Class可视为一个对象,因为Class下有属性、方法和事件等

所以,最上层的NameSpace是看作是同类型对象的集合,一个NameSpace之下可拥有多个Class。

了解了NameSpace及Class的概念,二者分別是表示对象集合和对象。

如何应用名字空间(NameSpace)?

<%@ Import Namespace="System.Globalization"%>

<%@ Import Namespace="DataEmployee" %>

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.ADO" %>

以上表示在ASP.NET网页中使用了四个NameSpace,接下来我们要申明变量,但此变量必须是已引用的四个NameSpace所属的Class,如:

Dim MyConnection As ADOConnection

Dim MyCommand As ADODataSetCommand

说明:ADOConnection及ADODataSetCommand都是System.Data.ADO之下的Class。

1. 2。ASP.NET中的文件类型?

ASP 的文件类型只有一种,其扩展名是.asp文件。那么在ASP.NET,就有很多的文件名: 文件扩展名 用途及说明

文件类型:

Global.asax ASP.NET系统环境设置文件,相当与ASP中的Global.asa。 .aspx 內含ASP程序代码的文件,如同過去的.asp,浏览器可执行此类文件,向服务器 提出浏览請求

.asmx 制作Web Service的原始文件

.sdl 制作Web Service的XML格式的文件 Vb或.cs 在非ASP.NET环境下,执行Web Service的文件 .aspc 可重覆使用在多个.aspx的文件,此文件內可含有控件 .ascx 內含User Control的文件,可內含在多個.aspx文件中

2. 3。什么是NGWS? ×××××××××××××××××××××××××××××这是关键

ASP.NET实际上是一个崭新的运行结构的一部分,这个结构提供对所有windows应用程序的

支持。这个结构是MicroSoft's Next Generation Web Services ( NGWS)关建部分。当你安装了这个结构,你就获得了ASP.NET。这个结构同样支持所有其它服务器程序技术。

NGWS 结构通过对可升级分布式应用添加 [新的和增强的服务] 来扩展COM的结构,此种结构常用做编写可重复调用的可共同使用的软件组件,这些新的和增强的服务有: 一套统一的丰富的程序库

一个支持多语言的运行引擎

简单地应用建立,调试,以及维护

对分布式应用加强了可升级性

保护现已存在的软件和投资

3. 4。Form

WEB FORM的后缀名是ASPX。当一个浏览器第一次请求一个ASPX文件时,WEB FORM页面将被CLR(common language runtime)编译器编译。此后,当再有用户访问此页面的时候,由于ASPX页面已经被编译过,所以,CLR会直接执行编译过的代码。

所以,asp.net是一次编译多次执行。

为了简化程序员的工作,ASPX页面不需要手工编译,而是在页面被调用的时候,由CLR自行决定是否编译。一般来说,下面两种情况下,ASPX会被重新编译:

1.ASPX页面第一次被浏览器请求;

2.ASPX被改写

Asp.net中函数使用sub开头,以sub结束。

sub 函数名(参数)

..

end sub

判断语句If也是一样,以If开头,以End if结束。例如:

if not isnumeric(TextBox1.text) then

lbloutput.text="请输入数值!"

End if

在.net中使用asp组件的方式。以<Asp:组件类型 />为表示,例如如下:

<ASP:DataGrid id="MyDataGrid" runat="server"

Width="600"

BackColor="white"

BorderColor="black"

ShowFooter="false"

CellPadding=3

CellSpacing="0"

Font-Name="Verdana"

Font-Size="8pt"

HeaderStyle-BackColor="#aaaadd" --定义一个ASP组件

MaintainState="false"

/> 此处表示定义完毕,也可以是下面一种定义

<asp:RequiredFieldValidator id="RequiredFieldValidator2"

ControlToValidate="TextBox1"

Display="Static"

Width="100%" runat=server>

*

</asp:RequiredFieldValidator> 此处定义完毕

以下是一段.net引用SQL连接的代码

<%@ Import Namespace="System.Data" %> --如果使用SQL语句对数据库进行操作的时候,就需要在页面中导入System.Data和System.Data.SQL名字控件

<%@ Import Namespace="System.Data.SQL" %>

<html>

<script language="VB" runat="server">

Sub Page_Load(Src As Object, E As EventArgs)

Dim DS As DataSet --定义数据集

Dim MyConnection As SQLConnection -定义连接

Dim MyCommand As SQLDataSetCommand

'同数据库进行连接,采用sql server数据库

MyConnection = New SQLConnection("server='iceberg';uid=sa;pwd=;database=info") '执行SQL操作

MyCommand = New SQLDataSetCommand("select * from infor",MyConnection)

DS = New DataSet()

MyCommand.FillDataSet(ds, "infor") --填充数据集

MyDataGrid.DataSource=ds.Tables("infor").DefaultView --负值给一个ASP组件 MyDataGrid.DataBind()

End Sub

</script>

<center>

<body>

<h3><font face="Verdana">Page_load事件演示</font></h3>

<ASP:DataGrid id="MyDataGrid" runat="server" --定义一个ASP组件

Width="600"

BackColor="white"

BorderColor="black"

ShowFooter="false"

CellPadding=3

CellSpacing="0"

Font-Name="Verdana"

Font-Size="8pt"

HeaderStyle-BackColor="#aaaadd"

MaintainState="false"

/>

/body>

</center>

</html>

函数:

1。判断输入的是不是是数字,可以使用isnumeric函数。例如:

if not isnumeric(TextBox1.text) then

lbloutput.text="请输入数值!"

End if

2。IsData()函数对输入的日期进行判断。IsData()接受的合法日期为100年1月1日到9999年12月31日

3。left$()函数,是对字符串进行部分取的函数。它取的是字符串的左边的N个字符。例如:

left$('abcddddd',3)返回的是'abc'

2005-9-2

后续:

控件:

1。RequiredFieldValidator 控件

该控件是用来控制用户必须输入的。使用该控件属性必须的是controltovalidate(控制的控件),可以是

文本框TextBox等其他可以接收输入的控件,该控件在常规下。

例如如下:

<html>

<body> <center> <title>验证控件演示 (1)</title> <h3><font face="Verdana">验证控件演示 (1)</font></h3> <form runat=server> 姓名: <asp:TextBox id=Text1 runat="server"/> <asp:RequiredFieldValidator id="RequiredFieldValidator1" ControlToValidate="Text1" 使用regularexpressionvalidator控件中对输入进行限制。 例如;要限制输入的数字。正则表达式:validationexpression="\d{1,20}" 如果要限制输入的不能为汉字。正则表达式:ValidationExpression="\w+$" 邮件:ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" Font-Name="Arial" Font-Size="11" runat="server">

此项不能为空! //注意该地方的ControlToValidate="Text1",它指明了控制的对象

</asp:RequiredFieldValidator> <p> <asp:Button id="Button1" runat="server" Text="验证" /> </form> </center> </body> </html>

注意,如果是使用了该组件。它的优先级比较高。

2。Comparevalidator控件

该控件主要是用来比较两个控件的值。改控件有两个属性,用来绑定比较源和比较地.ControlToValidate绑定比较源,

ControlToCompare绑定比较地

3. RangeValidator控件

该控件主要是用来

4. HyperLink控件。

HyperLink控件,是用来链接到要浏览的地址的,可以文字浏览也可以图案浏览,通过设置NavigateUrl属性。而

Target属性决定是否要开启新窗口或者是使用框架。

5。Button控件

Button控件是最普遍的跟用户交互的组件。通常需要注意它的3个事件和一个属性 。onclick事件,该事件是用户按下按钮触发的事件。

。onMouseOver 事件,是当光标进入按钮范围触发的事件。

。onMouseOut 事件,是当光标脱离按钮范围触发的事件。

. Text 属性,用来显示按钮

但是还必须注意的是,要使用按钮的Click事件,除了要指定Onclick="事件名称"外,还必须将对象放在窗体标注中才会

有作用。至于Command 和 CommandArgument属性可以用来和DataList等组件配合使用。

例如如下是一个使用的例子:

<% @Page language="C#"%>

<SCRIPT LANGUAGE="c#" Runat="Server">

public void Button_Click(Object sender,EventArgs e)

{ string argName=((Button)sender).CommandName; //有点类似D中的共享一个按钮事件,通过tag来区分一样

string argArg=((Button)sender).CommandArgument;

Label1.Text="你的选择是:<font color=red>"+argName+"</font>,学分为:<font color=Blue>"+argArg+"</font>";

}

</SCRIPT>

<HTML>

<HEAD>

<TITLE></TITLE>

</HEAD>

<BODY>

<H3>使用按钮Button</H3>

<CENTER>

<FORM runat="server">

<asp:Button Id="Button1" CommandName="物理" CommandArgument="4 学分" Text="功课一" runat="server"

Onclick="Button_click" />

<br>

<asp:Button Id="Button2" CommandName="数学" CommandArgument="5 学分" Text="功课二" runat="server"

Onclick="Button_click" />

<br>

<hr>

<asp: label Id="Label1" Runat="Server" />

</FORM>

</CENTER>

</BODY>

</HTML>

6. LinkButton 控件

LinkButton 控件跟HyperLink控件有点类似,都是可以作为链接的,但是不同的是,它属于Button控件,没有

NavigateUrl属性,它的链接功能在

7. RegularExpressionVal 控件

该控件用来控制用户输入的,

例如,如果要控制输入的不为汉字。则在

页面处理事件:

page_load 事件:是在页面加载的时候发生的,在处理的时候,可以根据IsPostBack属性判断页面是否为第一次被请求,

执行数据绑定。利用该事件可以把要处理的数据从数据库读取出来 page_unload 事件:是在页面内容全部下载完毕时才会发生的事件,在该事件中可以将使用完毕的对象清除,或者关闭

数据库连接,但是不可以使用Response.Write()输出内容到浏览器 例如,下面是在page_unload处理的,

<%@ import namespace="system.io"%> //导入system.io命名空间

<html>

<head><title>Page_Unload事件</title></head>

<body><h3>处理Page_Unload事件</h3>

<script>

public Dim writeFile As StreamWriter //创建一个流文件

Sub Page_load(Sender As Object,E as EventArgs)

writeFile=File.CreateText("c:\page_unload.txt");

writeFile.WriteLine("这是测试文件")

writeFile.WriteLine("使用Page_load事件")

Response.Write("创建")

End Sub

Sub Page_Unload(Sender AS Object ,E as EventArgs)

writeFile.close

End Sub

</script>

</body>

</html>

在ASP.NET或者时VB.NET中,事件必须以Sub 开头,然后是对象名称加下划线,加事件名.

事件的语法为:

Sub 对象名称_事件名(参数 1 As 类型,参数 2 As 类型,..)

程序代码..

End Sub

事件:

Equals 事件,是判断等于不等于。例如:

If username.value.Equals("yang") and password.value.Equals("123456") then response.write ("")

else

response.write ("")

2005-5-6

函数:

日期:

我们要将指定的日期存入日期型态的变量中,该日期必须用井号[#]围起来,并且输入[月/日/年]

例如:

dtvar=#mm/dd/yyyy# 或者是dtvar=#mm-dd-yyyy#

例如:

Dim dtmybday As date

dtmybday=#10/03/1973#

Response.Write("我的生日是"&Cstr(dtmybday))

2005-4-10

4. C# 学习

在C# 中是区分大小写的。注释是用双斜杠表示,或者是用采用 /* 和 */这样来进行多行注释

在C# 中通过使用using来引入名字空间.有点类似在C 或者是C++中使用的是#include来引入。

例如:

using System; //引入Systme名字空间

class Weclome

{

static void Main(){

Console.WriteLine("please enter"); //以;为结束

Console.ReadLine();

Console.WriteLine("weclome");

}

} //程序以Main()为入口。通过创建Weclome类.调用控制台Console读取用户的输入 //这里注意引入了System名字空间,如果不引入名字空间的话,调用控制台就要 //Systme.Console.WriteLine();

此时如果需要接收到用户输入的,可以通过定义一个变量来接收

string name=Console.ReadLine(); //因为系统定义ReadLine返回的是string类型的值 此时,如果要把用户输入的再次输出,在输出的时候,需要格式化输出

Console.WriteLine("Welcome to you,{0}",name); //注意此处的格式化输出。采用这种方式最多可以格式化3个变量

例如:

int x=3;

string name1="Mike";string name2="John";

Console.WriteLine("Welcome to you {0} times,{1} and {2}",x,name1,name2);

C# 的值可以分为:简单类型、结构类型、枚举类型

1。 简单类型: 简单类型又分为整数类型、布尔类型、浮点类型、字符类型

1.)整数类型分为以下几种:

sbyte 有符号8位整数

byte short int uint 无符号8位整数 有符号16位整数 无符号16位整数 在-128到127之间 在0到255 在-32768~32767 在0到65535之间 ushort 有符号的32位整数 在-2147482648~2147483647 无符号的32位整数 0~4294967295 64位整数 long 有符号的9223372026854775808~9223372036845775807

ulong 无符号的64位整数

using System; 0~184xxxxxxxx709551615

class Test { public static void Main(){ short X=32766; x++; Console.WriteLine(x); x++; Console.WriteLine(x); } } //输出为32767和-32768。因为超过范围

2.)布尔类型。 可以这样写:

bool x=true; //以前在C中或者C++中,可以这样bool x=1,但是在C#中不能这样表示)

3.)浮点类型:

C# 中采用两种数据类型来表示,单精度(float)和双精度(double)

单精度(float): 取值范围在正负1.5*10的负45次方到3.4*10的38次方之间,精度为7位数

双精度(double): 取值范围在正负5.0*10的负324次方到1.7*10的308次方之间。精度为15到16位

c#还专门定义了一种十进制类型(decimal),主要是方便在金融和货币方面的计算。它是一种高

精度、128位数据类型。它所表示的范围从大约1.0*10的-28次方到7.9*10的28至29位有效数字。

该精度是用位数(digits)而不是以小数位(decimal places)来表示的。精确到28个小数位。虽然

比double类型范围小,但是更精确。 例如: decimal d_value=1.0m; //m下标表明是一个十进制类型。如果省略会被当作double类型

2. 结构类型

结构类型采用struct来定义。例如

struct PhoneBook{ public string name; public string phone; public string address; } //以上是一个结构 4.)字符类型 字符类型采用Unicode字符集。一个Unicode的标准字符长度为16位。 例如 char c='a';

PhoneBook p1; //定义一个这个结构的变量 p1.name="Mike"; //引用变量 可以在结构中再定义结构。例如: struct PhoneBook{ public string name; public unit age; public string phone; public struct address{ public string city; public string street; public uint no; } }

3. 枚举类型:(enum)实际上是为一组在逻辑上密不可分的整数值提供便于记忆的符号,枚举变量在

某一时刻只能取枚举中的某一个元素的值

例如:

enum WeekDay{sunday,monday,tuesday,wednesday,thursday,friday,saturday};//定义 WeekDay day; //定义变量

系统默认,枚举的每个元素类型都是int型。且第一个元素值为0,后面每一个连续元素加1

也可以直接给元素赋值。例如:

enum WeekDay{sunday=1,monday,tuesday,wednesday,thursday,friday,saturday} 为枚举类型的元素所赋的值类型限于long,int,short和byte等

4. 引用类型:引用类型实际上存储的是实际数据的引用值的地址。类型有四种:

1. 类

2. 代表

3。数组 4。接口 1. 类:类是面向对象编程的基本单位,包含数据成员,函数成员和嵌套类型的数据结构

例如:

class PhoneBook { private string name; private string phone; private struct address{ public string city; public string street; public uint no;

} public string Phone{ get{return phone;} } set{phone=value;}

}

public PhoneBook(string n){ //类的构造函数

PhoneBook p1;//定义一个类变量 在C# 中经常用到的两个类: name=n; }; //定义类

1. object 类:它是所有其它类型的基类。C#中所有类型都直接或间接地从object类中继承。

因此,对一个object的变量可以赋予任何类型的值。 例如; int x=25; object obj1; obj1=x;

object obj2="A"

2. string 类:该类书专门对字符串操作的(跟delphi中类似)。 例如: string string1="welcome"; string string2="welcome"+"everyone"; char c=string1[0]; bool b=(string 1==string2);

2. 代表(delegate): 代表相当于在C或者是C++中的指针。但是因为在C# 中指针可以使用。

但是要声明这段程序是"非安全"(unsafe)的。,因此在C# 中使用代表来代替指针。它是

安全的。 在声明代表是,只需要指定代表指向的原型的类型,它不能有返回值,也不能带有输出

类型的参数。

例如: delegate int MyDelegate(); 例如。下面是一段使用代表的例子: using System; delegate int MyDelegate(); //声明一个代表 public class MyClass { public int InstanceMethod(){

Console.WriteLine("Call the instance method");

return 0; } static public int StaticMethod(){ Console.WriteLine("Call the static method"); return 0; } } public class Test { static public void main() { Myclass p=new Myclass(); //声明一个类

MyDelegate d=new Mydelegate(p.InstanceMethod);//将代表指向非静态方法InstanceMethod

d();//调用非静态方法 d=new MyDelegate(MyClass.StaticMethod); d();//调用静态方法 } } 程序得到的输出结果是: call the instance method call the static method 3. 数组

数组定义可以例如:数组从0开始作为下标

int[] arr; //可以直接定义个数,也可以不用.要取得数组的长度可以数组名加圆点加"Length"

//获得。。例如 arr.Length

例如:

using System; class Test { static void Main() { int[] arr=new int[5]; //定义一个一维的数组 for(int i=0;i<arr.Length;i++) arr[i]=i*i; for(int i=0;i<arr.Length;i++) Console.WriteLine("arr[{0}]={1}",i,arr[i]); } }

4. 装箱(boxing)和拆箱(unboxing):简单的说,有了装箱和拆箱的概念,对任何类型的值来说最终

我们都可以看作是object类型 装箱转换:装箱转换是指将一个值类型隐式地转换成一个object类型,或者把这个 如果要定义多维的,直接用逗号,分割。例如: string[,] a2; //定义二维数组. string[,,] a3;//三维护 int[][]j2; //多维可变数组 多维数组的初始化: int[,] a2=new int[,]{{1,2,3},{4,5,6}} int[][]j2=new int[3][]; j2[0]=new int[]{1,2,3}; j2[1]=new int[]{1,2,3,4,5,6}; j2[2]=new int[]{1,2,3,4,5,6,7,8,9}; 值类型转换

成一个被该值类型应用地接口类型(interface-type). 例如:

int i=10;

object obj=i; //隐式转换。。。等同于object obj=object(i); 下面的例子是应用装箱 using System; class Test{ public static void main(){ int i=10; object obj=i; if (obj is int){ //判断类型是不是int 的 Console.Write("The Value of i is boxing"); } i=20; Console.WriteLine("int:i={0}",i); Console.WriteLine("object:obj={0}",obj); } } 结果为: The Value of i is boxing! int:i=20; object:obj=10; //说明被装箱的类型的值是作为一个拷贝赋给对象的。 拆箱转换: 跟装箱转换相反。是指将一个对象类型显式地转换为一个指类型,或是将一个接口类型显

式地转换为一个执行该接口的值类型。分为两步:首先,检查这个对象实例,看它是否为

给定的值类型的装箱值,然后,把这个实例的值拷贝给值类型的变量 例如: int i=10; object obj=i; int j=(int)obj; 必须注意的是:装箱转换和拆箱转换必须遵循类型兼容原则 变量:在C#中特殊一点的是允许在变量前面加@号作为前缀,但是不提倡。 在C#中,我们把变量分为七种类型,分别为:静态变量(static variables), 非静态变量(instance variables),数组元素(array elements),值参数(value parameters),

引用参数(reference parameters),输出参数(output paramters),局部变量(local variables)

静态变量: 带有"static" 修饰符声明的变量成为静态变量。 常量: 常量可以使用关键字const来定义。例如: public const double x=1.0,y=2.0,z=3.0 其中在常量修饰符前面可以加以下几个修饰符: new,public,protected,internal,private 在C#中也存在两种转换,一个是显式转换,一个是隐式转换。但是都要遵循从小到大的转换原则。

隐式转换:不用加任何声明就可以进行转换。

但是需要注意的是在隐式转换中,不存在到Char类型的隐式转换,这意味着其它类型值不能自动

转换为char 类型.这一点很重要.

隐式枚举转换:

隐式枚举转换允许把十进制整数0转换为任何枚举类型,对应其它的整数则不存在这种隐式转换。

例如: using System; enum Weekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}; class Test { public static void Main(){ Weekday day; day=0; Console.WriteLine(day); }

} 程序输出为: 0; 但是如果day=1则编译不过去 显式转换: 显式转换又称为强制类型转换。需要用户明确地指定转换的类型。 例如: long l=5000; int i=(int)l; 显式转换有可能丢失信息或导致异常抛出,转换按照下面规则进行: 1。对于从一种整型到另一种整型的转换,编译器将针对转换进行溢出检测,如果没有发生溢出,转换

成功,否则抛出一个OverflowException异常。这种检测还与编译器是否设定了checked选项有关。

2. 对于从float,double,或decimal到整型的转换,源变量的值通过舍入得到最接近的整型值作为转换

的结果。如果这个整形值超过了目标类型的值域。则将抛出一个OverflowException异常。

3。对于从double到float的转换,double值通过舍入取最接近的float值。如果这个值太小,结果将变成

正0或负0;如果这个值太大,将变成正无穷或负无穷。如果原值是NaN,则转换结果也是NaN.

4. 对于从float或double到decimal的转换,源值将转换成小数形式并通过舍入取得小数点后28位(如果

必要的话)。如果源值太小,则结果为0;如果太大以致不能用小数表示,或是无穷和NaN,则将抛出

InvalidCastException异常。

5。对于从decimal到float或double的转换,小数的值通过舍入取最接近的值。但是这种转换可能会丢失

精度,但不引起异常。 例如: using System; class Test { static void Main(){ long longValue=Int64.MaxValue; int intValue=(int)longValue; Console.Writeline("(int){0}={1}",longValue,intValue); } } 结果为:(int)9223372036854775807=-1,发生了溢出,导致信息丢失。 显式枚举转换是这样进行的:它实际上是枚举类型的元素类型与相应类型之间的隐

式或显式转换。

比如,有一个元素类型为int的枚举类型E,则当执行从E到byte的显式枚举转换时,实际上作的时从int

到byte的显式数字转换;当执行从byte到E的显式枚举转换时,实际上是执行byte到int的隐式数字转换。

例如: using System; enum Weekday{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}; class Test { public static void Main() {Weekday day; day=(Weekday)3; Console.WriteLine(day); } } 结果为3; C# 中的操作符的分类:

C# 中根据操作符作用的操作数的个数,可以分为一元操作符、二元操作符和三元操作符

例如: int x=5,y=10,z; x++; //后缀一元操作符 --x; //前缀一元操作符 z=x+y;//二元操作符 y=(x>10?0:1);//三元操作符,在C# 中只有一个三元操作符 操作符的优先级根据操作数的个数不用而不同,例如x=y=z按照x=(y=z)进行求值。 IS 操作符: is 操作符被用于动态地检查运行时对象类型是否和给定的类型兼容。 格式为: "e is T" ,返回值是一个布尔值。 As 操作符 as操作符用于通过引用转换或装箱转换将一个值显式地转换成指定的引用类型 转换不会产生任何异常。如果转换不成功,结果为null. 格式:e as T .返回值的类型总是T New 操作符

New 操作符用于创建一个新的类型实例。暗示一个类实例的创建,但是不一定动态内存分配。区别于

C++. typeof 操作符,该操作符用于获得系统原型对象的类型

例如: using System; class Test { static void Main(){Console.WriteLine(typeof(int));} } 结果为:Int32; String FILENAME;//声明文件名 String TxtContext; StreamReader FileReader; FILENAME=Server.MapPath("readme.txt");

StreamReader( FILENAME, FileReader = new

System.Text.Encoding.GetEncoding("GB2312") );

TxtContext=FileReader.ReadToEnd(); txtAccept.Text=TxtContext.ToString();//.Replace(vbCrLf,"<br>"); FileReader.Close();

5. 设定net中语言显示的数据编码的,可以通过设置config.web这个文件,

在configuration的globalization中设置 <configuration> <globalization requestencoding="big5" responseencoding="big5"/> </configuration> 把这个文档放在在c:\inetpub\wwwroot中,则在这个路径之下的数据夹都会受影响

2005-5-12

6. 在C#中如果在类中声明函数的时候。函数的类型通常是放在函数使用范围的后面。例如:

public class SqlDataBase

{

private CommandType cmdType; public CommandType CmdType //注意在C#中是有区分大小写的。这里是两个不同的变量。变量的作用域也不同,一个是

//private,一个是public

{set {cmdType =value ;}}

public DataSet GetDataSet() //此时函数的返回类型是DataSet也就是数据集类型 {}

}

在调用的时候,先声明一个对象

GPublicMsg.CallDataBase.SqlDataBase sql = new SqlDataBase();

sql.StrCommand="select userid from tb_user where username=@username and password=@Password";

sql.CmdType = CommandType.Text; //这里调用,上面的声明跟D有点类似

<script language="javascript">

function click() {

if (event.button==2) {

alert('欢迎光临。')

}

}

document.onmousedown=click

</script>

2005-6-23

7. ASP.NET中的Repeater控件用法:

Repeater是用来显示数据的控件,类似于DATAGRID,但是区别在于使用这个可以让用户自己定义

Repeater控件使用中在网页页面中可以使用的

<AlternatingItemTemplate></AlternatingItemTemplate> *,可选,当选择的时候,表示是数据偶数行的数据

<FooterTemplate></FooterTemplate> * 可选,当选择的时候,显示的网格底部

<HeaderTemplate></HeaderTemplate> * 可选,表示的是网格头的数据

<ItemTemplate></ItemTemplate> * 必须的,用来显示数据的,

<SeparatorTemplate></SeparatorTemplate> * 可选,表示的分割条的数据

使用Repeater控件,需要在代码文件中绑定数据

例如下面是一个使用的例子:

在页面中:

<asp:Repeater EnableViewState="False" ID="Threads" runat="server">

<HeaderTemplate>

<!-- ********* HeaderTemplate.Start ************* //--> <table border="0" cellspacing="0" cellpadding="0" width="100%"> <tr> <td width="5"> <img src='<%= Globals.GetSkinPath() + "/images/spacer.gif"%>'

width="5" height="1" />

</td> <td width="100%" align="center" valign="top"> <div style="padding-bottom: 6px;"> <table width="100%" class="tableBorder"

<tr> <td colspan="5" class="fh1"> &nbsp;<b><%= </td> cellpadding="2" cellspacing="1">

ResourceManager.GetString("ViewThreads_Posts")%></b> </tr> <!-- ********* 列表头 ************* //--> </HeaderTemplate> <AlternatingItemTemplate> <!-- ********* 奇数行数据 ************* //--> <tr> <td width="25" valign="middle" align="right" class="f1"> <%# Formatter.StatusIcon( (Thread) Container.DataItem ) %> </td> <td width="*" class="f1"> <table width="100%" cellpadding="1" cellspacing="0"> <tr > <td nowrap="true"> <%# Formatter.StatusIconText(

<%# Formatter.ThreadEmoticon( (Thread) (Thread) Container.DataItem ) %>

Container.DataItem ) %>

</td> <td width="100%" align="left">

class="<%# Formatter.ReadLink( ((Thread) <a

Container.DataItem).HasRead ) %>"

( title="<%# Globals.GetSiteSettings().EnablePostPreviewPopup &&

? ForumContext.Current.User.EnablePostPreviewPopup

Formatter.CheckStringLength(Formatter.StripAllTags(DataBinder.Eval(Container.DataItem, "Body").ToString()), 300) : String.Empty )%>"

href="<%#

Globals.GetSiteUrls().Post( (int) DataBinder.Eval(Container.DataItem, "PostID") ) %> "> <%#

Formatter.CheckStringLength(DataBinder.Eval(Container.DataItem, "Subject").ToString(), 65) %>

</a> </td> <td align="right"><forums:RatingImageButton Thread='<%#

(Thread) Container.DataItem %>' runat="server"

(Thread) ID="Ratingimagebutton1"/><forums:ThreadStatusImage Thread='<%#

Container.DataItem %>' runat="server" ID="Threadstatusimage1"/></td>

</tr>

</table>

<table width="100%" cellpadding="0" cellspacing="0"> <tr> <td width="*" > &nbsp;<%=

"AuthorID"), ResourceManager.GetString("ForumGroupView_Poster")%><%# Formatter.FormatUsername( (int) DataBinder.Eval(Container.DataItem,

"Username").ToString() ) %>

Container.DataItem ) %>

<%# Formatter.ForumNameInThreadView( (Thread) DataBinder.Eval(Container.DataItem, </td> <td width="200" align="right" ><!-- ********* 帖子是否精选图标

runat="server"

%>' ThreadID='<%# Replies='<%#

DD05.6.23 DD05.6.23 ************* //--> <Forums:ThreadPager DataBinder.Eval(Container.DataItem, "PostID") DataBinder.Eval(Container.DataItem, "Replies") %>' ID="Threadpager2"/> <!-- ********* 帖子是否精选图标

************* //-->

</td>

</tr>

</table>

</td> <td width="175" align="right" class="f1"><span class="txt3"> <%# Formatter.FormatLastPost( (Thread) Container.DataItem ) %> </span> </td> <td width="65" align="center" class="f1"> <%# Formatter.FormatNumber( ((Thread) Container.DataItem).Replies ) %> </td> <td width="65" align="center" class="f1"> <%# Formatter.FormatNumber( ((Thread) Container.DataItem).Views ) %> </td> </tr> <!-- ********* 奇数行数据 ************* //--> </AlternatingItemTemplate> <ItemTemplate> <!-- ********* 偶数行数据 ************* //--> <tr> <td width="25" class="f1" valign="middle" align="right"> <%# Formatter.StatusIcon( (Thread) Container.DataItem ) %>

</td>

<td width="*" class="f1"> <table width="100%" cellpadding="1" cellspacing="0"> <tr> <td class="StatusIconText" nowrap="true">

<%# <%#

Formatter.StatusIconText( Formatter.ThreadEmoticon(

(Thread) (Thread)

Container.DataItem ) %> Container.DataItem ) %>

</td>

<td width="100%" class="txt3Bold" align="left">

<a

class="<%#

Formatter.ReadLink( title="<%#

&& ? ((Thread)

Container.DataItem).HasRead ) %>"

( Globals.GetSiteSettings().EnablePostPreviewPopup ForumContext.Current.User.EnablePostPreviewPopup

Formatter.CheckStringLength(Formatter.StripAllTags(DataBinder.Eval(Container.DataItem, "Body").ToString()), 300) : String.Empty )%>" href="<%# Globals.GetSiteUrls().Post( (int) DataBinder.Eval(Container.DataItem, "PostID") ) %> "> <%#

Formatter.CheckStringLength(DataBinder.Eval(Container.DataItem, "Subject").ToString(), 65) %> </a> </td> <td class="txt4" align="right"><forums:RatingImageButton Thread='<%# (Thread) Container.DataItem %>' runat="server" /><forums:ThreadStatusImage Thread='<%# (Thread) Container.DataItem %>' runat="server" /></td>

</tr> </table>

<table width="100%" cellpadding="0" cellspacing="0">

<tr> <td width="*" class="txt4">

&nbsp;<%=

ResourceManager.GetString("ForumGroupView_Poster")%><%# Formatter.FormatUsername( (int) DataBinder.Eval(Container.DataItem, "Username").ToString() ) %>

<%#

Container.DataItem ) %>

"AuthorID"),

DataBinder.Eval(Container.DataItem,

(Thread)

Formatter.ForumNameInThreadView(

</td>

<td width="200" align="right" class="txt4"><!-- ********* 帖子是否精选图标DD05.6.23 ************* //-->

<Forums:ThreadPager runat="server" DataBinder.Eval(Container.DataItem, "PostID") %>' DataBinder.Eval(Container.DataItem, "Replies") %>' ID="Threadpager1"/>

ThreadID='<%# Replies='<%#

<!-- ********* 帖子是否精选图标DD05.6.23 ************* //-->

</td>

</tr>

</table>

</td> <td width="175" class="f" align="right"><span class="txt3"> <%# Formatter.FormatLastPost( (Thread) Container.DataItem ) %> </span> </td> <td width="65" class="f" align="center"> <%# Formatter.FormatNumber( ((Thread) Container.DataItem).Replies ) %> </td> <td width="65" class="f" align="center"> <%# Formatter.FormatNumber( ((Thread) Container.DataItem).Views ) %> </td> </tr> <!-- ********* 偶数行数据 ************* //--> </ItemTemplate> <FooterTemplate><!-- ********* 尾数据 ************* //--> <!-- ********* FooterTemplate.Start ************* //-->

</table> </div> <!-- ********* 这里是跟上面头数据相对应的表格标签 ************* //-->

<!-- ********* FooterTempalte.End ************* //-->

</td>

<td width="5"> <img src='<%= Globals.GetSkinPath() + "/images/spacer.gif"%>' width="5" height="1" />

</td>

</tr> </table>

</FooterTemplate>

</asp:Repeater>

此时在页面的程序代码中绑定数据:

Repeater.DataSource=dataset;

Repeater.DataBind(); //这样绑定

2005-7-5

8. 如果要服务器控件执行后台代码之前执行一段脚本。可以在页面加载的时候,负给服务器控件属性。例如:

if (!Page.IsPostBack)

{ IBt_register.Attributes.Add("onclick","ifconsistent();"); }

2005-7-8

9. 获取时间包括年月日小时分钟秒毫秒: DateTime.Now.ToString("yyyyMMddhhmmssms");

2005-8-15 2006-9-3 后续,注意大小写区分

10. 把字符串转换为小写

/// <summary>

/// 判断字符是否英文半角字符或标点

/// </summary>

/// <remarks>

/// 32 空格

/// 33-47 标点

/// 48-57 0~9

/// 58-64 标点

/// 65-90 A~Z

/// 91-96 标点

/// 97-122 a~z

/// 123-126 标点

/// </remarks>

public static bool IsBjChar(char c)

{

int i = (int)c;

return i >= 32 && i <= 126;

}

/// <summary>

/// 判断字符是否全角字符或标点

/// </summary>

/// <remarks>

/// <para>全角字符 - 65248 = 半角字符</para> /// <para>全角空格例外</para>

/// </remarks>

public static bool IsQjChar(char c)

{

if (c == '\u3000') return true;

int i = (int)c - 65248;

if (i < 32) return false;

return IsBjChar((char)i);

}

/// <summary>

/// 将字符串中的全角字符转换为半角

/// </summary>

public static string ToBj(string s)

{

if (s == null || s.Trim() == string.Empty) return s;

StringBuilder sb = new StringBuilder(s.Length);

for (int i = 0; i < s.Length; i++)

{

if (s[i] == '\u3000')

sb.Append('\u0020');

else if (IsQjChar(s[i]))

sb.Append((char)((int)s[i] - 65248));

else

sb.Append(s[i]);

}

return sb.ToString();

}

后续:2005-9-13 以下是另一种获取字符串的,根据庄杨提供: #region 截取指定长度的文本函数

/// <summary> /// 截取指定长度的文本函数 /// </summary> /// <param name="Length">指定截断长度</param> /// <param name="Str">文本字符串</param> /// <param name="AddString">附加字符串</param> /// <returns>文本前i个字符</returns> public static string CutText(string Str,int Length,string AddString) { //判断字符串长度是否大于截断长度 if(System.Text.Encoding.Default.GetByteCount(Str) > Length) { //判断字串是否为空 if(Str == null) { } return "";

2005-9-13 } } //初始化 int i = 0, j = 0; //为汉字或全脚符号长度加2否则加1 foreach (char Char in Str) { } if ((int)Char > 127) { } else { i ++; i += 2; } if (i > Length) { } j ++; if( AddString != string.Empty ) { } Str = Str.Substring(0, j) + AddString; else { Str = Str.Substring(0, j); } break; return Str; #endregion

11. 在.net中如果用一个label,或者是直接输入到表格的单元格中,如果因为长度过长的化,可以通过设置style样式来进行

折行处理。只要加入样式:style="WORD-BREAK:break-all;WORD-WRAP:break-word",这样式适用于表格

12. 获取日期

DateTime.Parse(ds.Tables["Userinfo"].Rows[0]["birthday"].ToString()).ToString("yyyy-MM-dd");

2005-9-22

13. net中case的应用:

switch (obj.ToString ()) { } case "Must": return "必选"; case "NoMust": return "可选"; default : return String.Empty ;

2005-10-10

14. 过滤标签

在.net中,如果要过滤掉HTML标签,可以使用以下几个函数

#region StripHtml 所有都过滤 public static string StripHtml(string html) { return Regex.Replace(html, "<[^>]+>",""); } #endregion #region StripHtml2 过滤指定 public static string StripHtml2(string html) { string temp = html; Regex re1 = new

new Regex(@"<(.*)>(.*)<\/\1>", Regex(@"<(.*)\/>", RegexOptions.IgnoreCase|RegexOptions.Multiline); Regex re2 =

RegexOptions.IgnoreCase|RegexOptions.Multiline);

temp = re1.Replace(temp, "$2"); temp = re2.Replace(temp, ""); return temp; } #endregion

#region StripHtml 过滤指定 public static string StripHtml(string html, { string temp = html; Regex re1 = new string tagName) Regex (@"<(" + tagName

+

+ + @")(.*)>(.*)<\/\1>",RegexOptions.IgnoreCase|RegexOptions.Multiline); Regex re2 = new Regex (@"<(" + tagName RegexOptions.IgnoreCase|RegexOptions.Multiline);

Regex re3 = new Regex (@"<(\/?)(" +tagName @")\/>", @")>", RegexOptions.IgnoreCase|RegexOptions.Multiline); } temp = re1.Replace(temp, "$3"); temp = re2.Replace(temp, ""); temp = re3.Replace(temp, ""); return temp; #endregion

2005-10-12

15. 判断文件是否存在

string filePath =Server.MapPath("UserUpload\\"+ds.Tables[0].Rows[0]["IMAGENAME"].ToString().Trim()); System.IO.FileInfo fi = new System.IO.FileInfo(filePath);

if(fi.Exists)

{

//Ed_photo.ImageUrl="UserUpload\\"+ds.Tables[0].Rows[0]["IMAGENAME"].ToString().Trim();

}

else

{

Response.Write("文件已经丢失!"); string strimg = ds.Tables[0].Rows[0]["IMAGENAME"].ToString().Trim(); strimg = strimg.Substring(0,strimg.IndexOf("."))+"b"+strimg.Substring(strimg.IndexOf(".")); Ed_photo.ImageUrl="UserUpload\\"+strimg; strphoto="UserUpload\\"+ds.Tables[0].Rows[0]["IMAGENAME"].ToString().Trim();

}

2005-10-14

16. 去掉缓存

Response.Cache.SetNoStore();

2005-11-1

17. 在.net中,如果执行了一个存储过程,如果用户的存储过程返回了多个数据集,如果要读取,可以使用SqlDataReader 来读取 例如:

SqlDataReader dr;

dr = myCommand.ExecuteReader(); // dr 装载

dr.Read(); // 当然读取第一个数据集

// 装载到用户类。 statistics.TotalUsers = (int) dr["TotalUsers"];

if (dr.NextResult()) // 读取下一个数据集

{

while (dr.Read())

statistics.ActiveUsers.Add( PopulateUserFromIDataReader(dr) ); //获取最活跃10为会员dd 05.8.25

}

dr.Close();

myConnection.Close();

return statistics;

18. 获取客户端系统的一些信息。例如获取操作系统,浏览器,可以使用下面的函数。

public static string GetUsersInfo(string Info,int Type) { string GetInfo=""; switch(Type) { case 1: if (Instr(Info,@"NT 5.2")>0) { GetInfo = "Windows 2003"; } else if(Instr(Info,@"NT 5.1")>0) { } GetInfo = "Windows XP";

else if(Instr(Info,@"Tel")>0) { GetInfo = "Telport"; } else if(Instr(Info,@"webzip")>0) { GetInfo = "webzip"; } else if(Instr(Info,@"flashget")>0) { } else if(Instr(Info,@"offline")>0) { } GetInfo = "offline"; GetInfo = "flashget"; else if(Instr(Info,@"NT 5")>0) { GetInfo = "Windows 2000"; } else if(Instr(Info,@"NT 4")>0) { GetInfo = "Windows NT4"; } else if(Instr(Info,@"98")>0) { GetInfo = "Windows 98"; } else if(Instr(Info,@"95")>0) { } else { } GetInfo = "未知"; GetInfo = "Windows 95"; break; case 2: if(Instr(Info,@"NetCaptor 6.5.0")>0) { GetInfo = "NetCaptor 6.5.0"; } else if(Instr(Info,@"MyIe 3.1")>0) {

} GetInfo = "MyIe 3.1"; } else if(Instr(Info,@"NetCaptor 6.5.0RC1")>0) { GetInfo = "NetCaptor 6.5.0RC1"; } else if(Instr(Info,@"NetCaptor 6.5.PB1")>0) { } else if(Instr(Info,@"MSIE 6.0b")>0) { } GetInfo = "Internet Explorer 6.0b"; GetInfo = "NetCaptor 6.5.PB1"; else if(Instr(Info,@"MSIE 6.0")>0) { GetInfo = "Internet Explorer 6.0"; } else if(Instr(Info,@"MSIE 5.5")>0) { GetInfo = "Internet Explorer 5.5"; } else if(Instr(Info,@"MSIE 5.01")>0) { GetInfo = "Internet Explorer 5.01"; } else if(Instr(Info,@"MSIE 5.0")>0) { } GetInfo = "Internet Explorer 5.0"; else if(Instr(Info,@"MSIE 4.0")>0) { } else { GetInfo = "未知"; } break; GetInfo = "Internet Explorer 4.0"; } return GetInfo; private static int Instr(string strA,string strB)

{

if(string.Compare(strA,strA.Replace(strB,""))>0)

{

return 1;

}

else

{

return 0;

}

}

#endregion

调用时候,使用

label1.text = GetUsersInfo(Request.UserAgent,2); // 获取客户端IE版本

label2.text = GetUsersInfo(Request.UserAgent,1); // 获取客户端操作系统

2005-11-28

这段是用脚本判断

function judgeIE5()

{

if(window.navigator.appVersion.indexOf("MSIE 5.0") != -1) return true;

return false;

}

function judgeIE6()

{

if(window.navigator.appVersion.indexOf("MSIE 6.0") != -1) return true;

return false;

}

2005-12-2

19. 页面中直接过来掉时间可以有两种方式,一种是绑定是如下 <%#Convert.ToDateTime(DataBinder.Eval(Container,

"DataItem.MakeupDate")).ToShortDateString()%>

另一种是

<asp:BoundColumn DataField="DraftDate" HeaderText="拟稿日期DataFormatString="{0:d}"></asp:BoundColumn>

此时绑定的是dataGrid

2005-12-16 "

20. 上传文件限制的,如果想要上传大数据的话。有两种方法,一个是修改机器的Machine.config

还有一个是修改项目的web.config 默认情况下,Machine.config 文件中的 <httpRuntime> 元素被设置为以下参数: <httpRuntime executionTimeout="90" 执行时间 最大上传 maxRequestLength="4096" minFreeThreads="8" useFullyQualifiedRedirectUrl="false" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" 连接时间限制 /> 修改项目的web.config,可以加入 <httpRuntime executionTimeout="7200" maxRequestLength="60000" /> 此时限制的是最大60M

2005-12-21

B 转化为 M

double i = Convert.ToDouble(ds.Rows[0]["EmailTheMeSize"].ToString()) / (1024*1024); string strvalue = Convert.ToString(i);

if ( strvalue.IndexOf(".") > 0 )

{

}

strvalue = strvalue.Substring(0,strvalue.IndexOf(".")+3);

2006-1-20

21. asp.net 中基于 Forms 验证的角色验证授权 /2005/9-30/132630702.html

asp.net 的身份验证有 3 种:windows 、forms、passport,其中以 Forms 最灵活。 Forms 验证方式对基于用户的验证授权提供了很好的支持,可以通过一个登陆页面验证用户的身份,

将此用户的身份发回到客户端的COOKIE,之后再访问WEB应用就会连同这个身份的COOKIE发送到服务器。

Forms 身份验证原理:

一 身份验证 要采用Forms 身份验证,先要在 web.config 中配置,例如: <authentication mode="Forms">

<forms name=".aspxauth" loginurl="/default.aspx" protection="All" timeout="30" path="/" />

</authentication>

mode="Forms" 表示采用Forms验证方式 name 表示指定要用于身份验证的 Http Cookie。默认值为 .aspxauth

采用此方式后,会建立一个FormsAuthenticationTicket类型的身份验证票,加密序列化为一个字符串,将这个

字符串写到客户端的name指定的Cookie中。

FormsAuthenticationTicket 类: CookiePath : 返回Cookie 的路径,注意窗体区分大小写 Expiration : 获取Cookie 过期的日期/时间 IsPersistent: 如果已发出持久的 Cookie ,则返回 true,否则,身份验证Cookie 将限制在浏览器生命周期范围内。

IssueDate : 获取最初发出 Cookie 的日期/时间

Name : 获取与身份验证 Cookie 关联的用户名 UserData: 获取存储在 Cookie 中的应用程序定义字符串 Version : 返回字节版本号供将来使用 <forms> 标签中loginUrl 指定如果没有找到任何有效的身份验证 Cookie,系统定向的URL,一般为登陆页,如果登陆

验证有效,则生成跟该用户对应的身份验证票,写到客户端的 Cookie,最后将浏览器重定向到用户初试请求的页面,

一般是用FormsAuthentication.RedirectFormLoginPage 方法来完成身份验证票,写回客户端。

Public static void RedirectFormLoginPage(string username,bool createPersistenCookie,string strCookiePath);

2006-1-23

22. .NET 中读取 XML 节点

如果要在.NET 中使用XML ,然后读取XML节点的值,可以使用下面的方法 先要引用XML类 using System.Xml; string Message="<?xml version=\"1.0\" encoding=\"utf-8\"?>"; Message+="<SendMessageGroup>"; Message+="<BizCode>130</BizCode>"; Message+="<GetStatusReport>1</GetStatusReport>"; Message+="<SenderNumber>059587275996</SenderNumber>"; Message+="<Content>短信息发送测试</Content>"; Message+="<Group>"; Message+="<ReceiverNumber>059528969802</ReceiverNumber>";

Message+="<ReceiverNumber>059522318000</ReceiverNumber>"; Message+="<ReceiverNumber>139xxxxxxxx</ReceiverNumber>"; Message+="</Group>"; Message+="</SendMessageGroup>"; XmlDocument doc = new XmlDocument(); // 生成XML类 doc.LoadXml(Message); // 加载XML文件 XmlElement MessageElement=doc.DocumentElement; // 以上是动态生成一个XML文件 XmlNode node = MessageElement.SelectSingleNode("SendMessageGroup"); // 获得单个 // 生成XML文档类 节点

foreach ( XmlNode tnode in MessageElement.SelectSingleNode("Group").ChildNodes) // 循环读取节点下的节点

{ susermessage += tnode.InnerText; } // huozhe shi XmlDocument UserXml = new XmlDocument(); XmlTextReader Reader=new XmlTextReader(Filname); UserXml.Load(Reader); // 生成XML类 // 加载XML文件 // 注意有的XML文档中加有数据岛 ,例如 <?xml version="1.0" encoding="GB2312"?> <feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">

<title>dingding</title>

<entry>

</entry> </feed> 此时如果要获取节点值,需要加入名称空间前缀 XmlNamespaceManager xnsm = new XmlNamespaceManager( doc.NameTable); xnsm.AddNamespace("atom", "http://purl.org/atom/ns#"); xnsm.AddNamespace("dc", "http://purl.org/dc/elements/1.1/"); 此时要获取节点值, XmlNode x = doc.SelectSingleNode("//atom:title"); 2006-6-15 后续。如果需要之读取某一个节点的值可以使用

MessageElement.SelectSingleNode("SendMessageGroup").innerText;

2006-2-7

23. 使用ControlCollection Controls,注意使用范围是System.Web.UI.Control类的

#region 重載System.Web.UI.Control類的Controls屬性 //獲取ControlCollection對象,該對象表示UI層次結構中指定的服務器控的子控件 public override ControlCollection Controls { get { //確定服務器控件是否包含子控件,如果不包含,則創建子控件 EnsureChildControls(); return base.Controls; } } #endregion

System.Web.UI.WebControls.WebControl:在ASP.NET中自定义控件的基类,我们可能会重写他的一些方法,常用的有:

CreateChildControls():给予控件创建内定子控件的机会,预设情况OnPreRender()方法会调用此方法要求该控件创建其子控件,别一种情况则是由FindControl()方法调用。

OnPreRender():触发PreRender事件,在绘制控件之前发生。

Render():绘制控件。

AddAttributesToRender():向标签中添加HTML样式或属性。

另外,还有一个方法:EnsureChildControls(),该方法用于确定服务器控控件是否包含子控件,如果不包含,则创建子控件,在设计阶段起作用。

这里创建的顺序是: 通过调用 EnsureChildControls ,确定是否有包含子控件,如果不包含,则创建,然后调用

CreateChildControls() ,来创建组件, 然后调用 Render 绘制组件

控件树的生成也是很有意思的,所有派生自Control类的控件(页面也是间接派生自Control),都有可重载的Render和

RenderChildren方法和RenderControl(写程序时可以重载这些方法,加入自己的处理逻辑),页面控件首先会建立

一个HtmlTextWriter的实例,然后将这个对象传给RenderControl方法,RenderControl方法会检查控件的Visible属性,

如果为真,就调用Render方法,Render方法默认的实现会调用RenderChildren方法,而这个方法默认会调用每个子控件

的RenderControl方法,这样通过递归,就完成了控件树的生成。下面是从书中看到的代码。

public void RenderContrl(HtmlTextWriter writer){ if(Visible) {Render(Writer);} } protected virtual void Render(HtmlTextWriter writer) { RenderChildren(writer); } protected virtual void RenderChildren(HtmlTextWriter writer) { foreach (Control c in Controls) {c.RenderControl(writer);} }

2006-2-21

24. 页面中动态生成组件

object tmp = System.Activator.CreateInstance(System.Web.UI.WebControls.TextBox); TextBox tmp1 = (TextBox)tmp; // 负值给组件 Page.Controls..Controls.Add(tmp1);

日期组件MSPlus.DatePicker.dll 使用方法,需要引用XCProf.dll 同时还有一些图片以及JS脚本

2006-2-26

25. 客户端检测到有潜在危险的Request.Form 值 解决方式:

方式1: web.config文件<system.web>后面加入这一句: <pages validateRequest="false"/>

例如:

<configuration> <system.web> <pages validateRequest="false"/> </system.web> </configuration> 方式2:在*.aspx文件头的Page中加入validateRequest="false", 例如: <%@ Page validateRequest="false" language="c#" Codebehind="index.aspx.cs" ... %>

2006-2-27

26. 创建目录

using System.IO; #region 取得用户ID所在的范围应存放的文件夹名 private string GetUserFileName(int UserID) { } #endregion string SavePath string UserPath = GetUserFileName( userid ); = Globals.ApplicationPath

string s = LoveArticle.GetXmlUserNode("PhotoFoldNumber"); int iNums = Convert.ToInt32(s); int i = iNums * ((UserID / iNums) + 1); return i.ToString(); + "/LoveWeb/UserForArt/"+SavePath+"/"+userid; SavePath = "..\\UserForArt\\"+ SavePath +"\\"+userid;

DirectoryInfo dc = new DirectoryInfo(Server.MapPath(SavePath)); if(!dc.Exists) { dc.Create(); } // 如果目录不存在,则生成 过滤非法字符串,如果数据库存放的定义的字符串为: |sex|cao|acc| using System.Text.RegularExpressions string strfilter = "|sex|cao|acc|"; string strfilterto = "*"; if ( strfilter != "" ) { } strfilter = strfilter.Substring( 1 , strfilter.Length - 2); .// 成为sex|cao|acc string reg = String.Format("({0})", strfilter); return System.Text.RegularExpressions.Regex.Replace( UserData, reg ,strfilterto , RegexOptions.IgnoreCase|RegexOptions.Multiline);

2006-3-17

27. 邮件

using System.Web.Mail;

try { MailMessage Message = new MailMessage(); if( this.chkRequireLogin.Checked ) {

Message.Fields.Add("/cdo/configuration/smtpauthenticate", "1" ); //basic authentication

Message.Fields.Add("/cdo/configuration/sendusername", Message.Fields.Add("/cdo/configuration/sendpassword", txtUserName.Text ); //set your username here txtPassword.Text ); //set your password here

// 超时时间增加 by venjiang

Message.Fields.Add("/cdo/configuration/smtpconnectiontimeout", 60);

} Message.To = txtTo.Text; Message.Cc = txtCC.Text; Message.Bcc = txtBCC.Text; Message.From = txtFrom.Text; Message.Subject = txtSubject.Text;

= (MailFormat)System.Enum.Parse(typeof(MailFormat), Message.BodyFormat

ddlMailFormat.SelectedValue );

} Message.Body = txtMessage.Text; SmtpMail.SmtpServer = txtServer.Text; SmtpMail.Send(Message); lblResult.Text = "邮件发送成功!"; catch( Exception ex ) { } lblResult.Text = ex.ToString();

2006-3-28

28. 强制本页面输出的为GB2312

Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");

2006-5-27

使用

2006-6-13

29. 创建文件提示没有权限,修复方法在 Webconfig 中加入

<identity impersonate="true|false" /> /27641/ShowPost.aspx HTTPModule 工作原理 /veelee/ Http Request开始

|

HttpModule

|

HttpModule.BeginRequest()

|

HttpModule.AuthenticateRequest()

|

HttpModule.AuthorizeRequest()

|

HttpModule.ResolveRequestCache()

|

建立HttpHandler控制点

|

接着处理(HttpHandler已经建立,此后Session可用)

|

HttpModule.AcquireRequestState()

|

HttpModule.PreRequestHandlerExecute()

|

进入HttpHandler处理HttpRequest

|

HttpHandler.ProcessRequest()

|

返回到HttpModule接着处理(HttpHandler生命周期结束,Session失效) |

HttpModule.PostRequestHandlerExecute()

|

HttpModule.ReleaseRequestState()

|

HttpModule.UpdateRequestCache()

|

HttpModule.EndRequest()

|

HttpModule.PreSendRequestHeaders()

|

HttpModule.PreSendRequestContent()

|

将处理后的数据返回客户端

|

整个Http Request处理结束

2006-6-16

30. EnableViewState 属性。

除了页面Page中的EnableViewState,每个可以提交的控件, Textbox、Dropdownlist都有EnableViewState属性。 实际上,回发的数据并不依赖于ViewState。回发的控件都实现了 IPostBackDataHandler接口,该接口的LoadPostData方法中,会对 返回的值和ViewState中的值进行判断,如果改变了的话, 调用RaisePostDataChangedEvent方法触发相应的事件(对于TextBox来说就是TextChanged事件)。

在很多情况下,把EnableViewState设为false,可以提高应用程序的性能。 特别在等待后台把数据填充到DataGrid的情况下。 如果这个时候设为true,那么cpu的时间都浪费 在序列化数据到 ViewState 中。 每个控件(在标记上):sp:datagrid EnableViewState="false" /> 每个页面(在指令中): <%@ Page EnableViewState="False" %> 每个应用程序(在 web.config 中): <Pages EnableViewState="false" />

2006-8-16

31. 页面中得到序列值,可以使用 <%#

+1%> ,但是只适合于表格Dbgrid

2008-10-14 Container.DataSetIndex

32. net2003 ie7下调试

将服务器添加到“本地 Intranet”

1在 Internet Explorer 中,从“工具”菜单中选择“Internet 选项”。 2 在“Internet 选项”对话框中,选择“安全”选项卡。

3 在“请为不同区域的 Web 内容指定安全设置”下,单击“本地 Intranet”或“可信站点”。

单击“站点”。

4 在“本地 Intranet”或“可信站点”对话框中,单击“高级”。

5 在“将该 Web 站点添加到区域中”框中,输入项目的 URL,单击“添加”,然后单击“确定”。

6 单击“确定”关闭“本地 Intranet”或“可信站点”对话框。

7 单击“确定”关闭“Internet 选项”对话框

InstallShield 操作 发布

build release 1--complie -- release wizward

2008-10-26

33. iis asp.net 不能选择

C开发积累从学习C以来的经验积累

应用程序未创

34. IIS6.0 浏览asp文件显示“无法找到该页”解决本法

今天笨了一回,刚安装好的系统,按照平常配置IIS,可是自己使用的时候却发现一个问题,明明根目录下有asp文件,但是就是打不开,显示404错误“无法找到该页”,明明有文件怎么会找不到该页呢?最后忽然想起windows 2003默认没有打开asp,赶紧打开,好了!可以用了。

打开asp:iis管理=>web服务扩展=>active server pages允许

35. SQL Server 2005 支持的约束

约束定义关于列中允许值的规则,是强制实施完整性的标准机制。使用约束优先于使用 DML 触发器、规则和默认值。

SQL Server 2005 支持下列约束类:

NOT NULL 指定列不接受 NULL 值。列的为空性决定表中的行是否可为该列包含空值。空值(或 NULL)不同于零 (0)、空白或长度为零的字符串(如 "")。NULL 的意思是没有输入。出现 NULL 通常表示值未知或未定义。如果插入一行,但没有为允许空值的列包括值,SQL Server 2005 数据库引擎 将提供 NULL 值,除非存在 DEFAULT 定义或 DEFAULT 对象。 CHECK 约束通过限制可放入列中的值来强制实施域完整性。通过限制列可接受的值,CHECK

约束可以强制域的完整性。此类约束类似于 FOREIGN KEY 约束,因为可以控制放入列中的值。列>0

UNIQUE 约束强制实施列集中值的唯一性。可以使用 UNIQUE 约束确保在非主键列中不输入重复的值。尽管 UNIQUE 约束和 PRIMARY KEY 约束都强制唯一性,但想要强制一列或多列组合(不是主键)的唯一性时应使用 UNIQUE 约束而不是 PRIMARY KEY 约束。可以对一个表定义多个 UNIQUE 约束,但只能定义一个 PRIMARY KEY 约束。而且,UNIQUE 约束允许 NULL 值,这一点与 PRIMARY KEY 约束不同。不过,当与参与 UNIQUE 约束的任何值一起使用时,每列只允许一个空值ALTER Table 【表名】

ADD CONSTRAINT UN_PHONE[约束名] UNIQUE (volunteer,HOTLIST_ID)[列名]; PRIMARY KEY 约束标识具有唯一标识表中行的值的列或列集。

FOREIGN KEY 约束标识并强制实施表之间的关系。如果主键里的数据被删除,有下列几个选项可选:NO ACTION 指定删除失败并提示错误。CASCADE 指定还将删除包含指向已删除行的外键的所有行。SET NULL 指定将包含指向已删除行的外键的所有行都设置为 NULL。SET DEFAULT 指定将包含指向已删除行的外键的所有行都设置为它们的默认值。

更多类似范文
┣ 开学以来的班主任工作总结 500字
┣ 开学以来工作总结 2000字
┣ 开学以来个人总结 400字
┣ 更多开学以来的总结
┗ 搜索类似范文