第一篇:自学.NET之路-C#编程之基础总结
.NetFramework简介
.netframework运行于操作系统之上,提供良好的跨语言特性。
.netframework包含两个内容:公共语言运行时(CLR)和类库集(FCL)
MSIL微软中间语言。当编译.net支持的语言编写的代码的时候,输出的代码为MSIL
CLR又包含:通用语言规范(CLS:保证语言互操作性的一组规则)和公共类型系统(CTS:包含了.net支持的各语言间兼容的数据类型和功能)
C#中的变量和常量
C#中的基本数据类型:
值类型和引用类型
值类型:简单类型、结构类型和枚举类型。
简单类型:整数类型、浮点类型、小数类型(decimal)和布尔类型等
sbyte是有符号的,相当java的byte型,范围-128~127
C#中byte是无符号的,范围0~255
变量命名方法:
帕斯卡命名法和骆驼命名法
帕斯卡命名法:如果有多个单词组成,每个单词首字母大写
骆驼命名法:如果有多个单词组成,第一个单词全部小写,后面的单词大写
C#中的常量:const与readonly两种
const声明的常量:叫静态常量,必须声明时就初始化,且只能用常数值初始化
readonly声明的常量:叫动态常量,可以在声明时不初始化,只能在构造函数中初始化,但必须每个构造函数中都要初始化;而且可以使用变量值初始化
class Test
{
constfloat PI = 3.1416f;//常量命名:全部大写
readonly float G;
public Test()
{
G = 9.80F;
}
public Test(float g)//每个构造函数中都要初始化;而且可以使用变量值初始化{
G = g;
}
}
C#中的装箱和拆箱
装箱:值类型转换成有引用类型
拆箱:引用类型转换成值类型
值类型:存在栈中
引用类型:在堆中存放对象的地址(即引用),对象本身存放在栈中
拆装箱允许值类型和引用类型相互处理
C#语法
Switch()括号中可以是int ,char和string ,switch语句中的case语句冒号后什么都不写,可以不写break,其他情况一定要写break,否则报错
数组:五种声明方式
int []array;
array = new int[2];
//第二种声明方式
int []array1 = new int[2];
//第三种声明方式
int []array2 = {1,2,3};
//第四种声明方式
int []array3 = new int[]{1,2,3};
//第五种声明方式
int []array4 = new int[3]{1,2,3};
//数组大小也可以是变量
int count = 3;
int []arr = new int[count];
枚举:用有意义的字符去访问数据
public enum Contry:long//指定枚举类型,必须是整型,不写为int型
{
Pacific,//第一个未付值,默认为零
China=1860,Japan,US=1901,Canada
}
C#中的面向对象
析构函数:函数名与构造函数名一样,~函数名(),不接受参数,由垃圾回收器自动调用(GC.Collect()调用垃圾回收器)
virtual关键字:C#中,子类要重写父类的方法,必须把父类的方法标识为virtual(虚拟的),同时重写方法用override修饰
new 关键字:new关键字:在子类中定义的一个和父类方法签名一样,但是个全新的方法。并非重写父类的方法。
base关键字:用base关键字调用父类的方法
访问修饰符:
public 公有的,internal 在一个项目中的,protected有父子关系的类,private仅所属类的成员
注意:如果有一个类既继承类又实现接口,类名要写在接口名前面。
属性,索引器,委托,事件
属性:访问修饰一般为public,首字母大写。属性内有get和set访问器,get内必须要有return,set内有value关键字,代表从外部接受的值。
索引器:索引器的作用:像处理数组一样去处理类的对象。
public class Student
{
private string []obj=new string[10];
//this关键字在这里代表每一个类的对象,[]中整数是指通过下标访问
public string this[int index]//此是可以通过索引号去访问每一个类的成员{
get
{
return obj[index];
}
set
{
if(value!=null)
obj[index]=value;
}
}
static void Main(string []args)
{
Student stucollection=new Student();
stucollection[0]=“柯南”;
stucollection[1]=“小五郎”;
stucollection[5]=“怪盗基德”;
}
}
委托:相当于函数指针,可使程序在运行是再指定具体要运行的方法。
(1)定义委托:Public delegate int Call()
(2)实例化委托:objcall=new Call(方法名)
(3)调用委托:objcall();
事件:事件实际上是一种特殊的委托,委托每次只能指向一个方法,而事件可以指向多个方法
(1)定义一个委托public delegate void delegateMe();
(2)定义一个事件 private event delegate eventMe;
(3)订阅事件eventMe+=new delegateMe(方法名1());
eventMe+=new delegateMe(方法名2());
(4)引发事件if(condition)theneventMe();
多线程
创建线程实例:
Thread obj=new Thread(new ThreadStart(方法名称))
开始:Start();
休眠:Sleep();
终止:Abort();
挂起:Suspend();
恢复:Resume();
当前线程:Thread.CurrentThread
ThreadPriority枚举值用来指定调度线程的优先级(共5级)
lock关键字
C#中通过lock关键字提供同步
线程同步:确保不同的线程对共享资源进行访问时,每次只有一个线程访问资源。Lock(this)
{
For(int i=0;i<10;i++)
{
//语句;
}
}
数组集合对象
Array: Array和数组很相似,还可以相互转化和拷贝,很多方法都是是通用,可以用Array的静态方法对数组实现反转,排序,这是数组本身无法做到的usingsystem.Array;
Array ar=Array.CreateInstance(typeof(int),5);//创建一个Array的实例
ar.SetValue(12,0);//赋值
Array.Reverse(ar);// 反转
Array.Sort(ar);// 排序
ArrayList:最常用的集合之一.集合的好处是在不知道数据大小时,可以实现容量自动增长,而数组做不到.Add()添加元素
Remove(位置)移除元素
ArrayList al=new ArrayList();
//如果要遍历集合元素,//方法一:
//将集合中的数拷贝到数组中
object []temp=al.ToArray();
foreach(object t in temp)
{
Console.WriteLine(t);
}
//方法二,使用迭代器
IEnumerator ie=al.GetEnumerator();
while(ie.MoveNext())
{
Console.WriteLine(ie.Current);
}
HashTable:以键值对的形式保存值
Hashtable hash=new Hashtable(4);
hash.Add(“中国”,1860);
hash.Add(“德国”,1940);
Console.WriteLine(hash[“中国”].ToString());通过key获得value
SortedList :是 Hashtable 和 Array 的混合能存放键值对,类似Hashtable
能通过自身提供的方法通过索引直接遍历,类似于Array objsortlist.GetKey(i)方法获得键
objsortlist.GetByIndex(i)方法获得值
青鸟BBSHTML七种加密解密
第二篇:c#基础总结
【1】面向对象程序设计语言的三大特点是什么?答:【23】Main函数特点?答:1)Main方法是C#程序的限定,默认的为private【2】三种命名法则的特点?答:匈牙利命名法:在变限定符,返回类型为void或int类型,Main方法必须是静态方法;3)一个类或结构只能有一个有效的入驼表示法:一个标示符用若干个有意义的英语单词或口点函数;4)main方法必须定义在某一个类中。缩写组成,第一个单词首字母小写,后边的首字母大【24】多态(重写、隐藏)
写;Pascal表示法:与骆驼表示法类似,但是第一个 单词的首字母也需要大写。【3】C#注释的三种形式特点?答1)单行注释:// 2)class A /// {public virtual void F()【4】引用类型和值类型的数据类型? {Console.WriteLine(“A.F”);}} abstract class B:A(1)int valOne = 0;{public abstract override void F();}int valTwo = valOne;答:abstract override 是不可以一起修饰 int valThree = 333;例:在下面的例子里 valTwo = 333;TestValueRefRef1 = new TestValueRef();class A TestValueRefRef2 = Ref1;{public A(){PrintFields();} Ref2.value = 444;public virtual void PrintFields(){} } Console.WriteLine(“values:{0},{1}”, Ref1.value, class B:A Ref2.value);{int x=1;int y;public B(){y=-1;} Console.WriteLine(“values:{0}, {1},{2}”,valOne, public override void valTwo,valThree);PrintFields(){Console.WriteLine(“x={0},y={1}”,答:输出结果:values:444,444 x,y);} 当使用new B()创建B的实例时,产生什么输出?(2)public class EnumTest答:x=1,y=0 { enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};分析:执行new B()时,由于B继承自A,所以会调用static void Main()A的构造函数,并执行其中的PrintFields()方法,由{int x=(int)Days.Sun;inty=(int)Days.Fri;于该方法为虚方法,在继承类中被重写,所以,将执Console.WriteLine(“Sun = {0}”, x);行B中的PrintFields()方法。此时,将在DOS界面Console.WriteLine(“Fri = {0}”, y);}} 上输出“x=1,y=0”,然后,在运行B的构造函数中的答:输出结果:Sun = 2Fri = 7 y=-1。(建议同学们将此程序放入到代码中,设置断点【5】枚举类型的字段和关联值?枚举类型有三个要看执行过程。)
【25】什么是多态对象?答:用基类类名声明,但是特性 修饰符 enum 枚举名 : 基础类型 {枚举成员声明,枚举成员声明,„„,枚举成员声明}默认的基础函数来实例化的对象。这类对象的主要用途是引发多类型为int;关联值:如果没有被声明,默认为0。态,为了将它们和一般的对象(声明和创建都使用同【6】强制类型转换(例:若有double f=2.7;int 一个类型名的对象)加以区别、揭示它们的特点和用2)将源类型的对象途,这种形态的对象称为多态对象。转换成为目的类型的对象 【26】接口的特点。答:接口只能包含抽象方法,不【7】运算符&和&&的区别?答:条件“与”运算符(&&)没有访问修饰符,接口成员必须是方法属性事件或者时才计算第二个操作数。而&需要计算所有操作数,索引器不能包含常数字段运算符也不能有静态成员。并且优先级高于&& 【27】委托和事件,【8】装箱和拆箱的概念?答:装箱就是把一个值类型委托的定义修饰符 delegate 返回类型 委托类型名(参数列表); 【9】for循环和if语句联合使用的程序分析,for(;;)eg: public delegate int DelegateClass(stringinfo);
和continue的区别?答:break跳出循委托的创建(实例化)委托对象 = new 委托名(关联方法); 【11】命名空间的特点答:它提供一种命名机制,是eg: DelegateClass obj=new DelegateClass(MethodA);
合方式无关,不能表明源文件的存取方式,命名空间DelegateClass obj=MethodA;//隐式创建和初是按层次组织的。始化(不用new)【12】数组元素的的复制和读值 例:分析下列语句: int[3]{5,6,2},new int[5]{6,9,7,8,3},new Hello(string target);} int[2]{3,2}};myArray3[2][2]的值是(D)A)9;B)2;该语句的作用是:在TestCS 命名空间中定义了了一C)6;D)越界 个名为Hello 的委托类型;
【13】类和对象的关系?答:类是对象的抽象,对象【28】Windows窗体中Button按钮触发的事件是什【14】关键字this和base的区别?答:base指代基【29】Windows窗体中控件的标识符如何修改?答:【15】关键字new、using的多种用法?答:new修饰【30】如何修改Windows窗体的启动窗体?答:修改被重写,但new修饰符可终止这一特性;向下传播; 实例化一个对象。Using:导入命名空间;自动释放【31】要使用SQL Server需要使用哪两个命名空间? Using代码框里的资源。【16】索引器的特点?答:索引器允许重载;字符串Using System.Date.SqlClient: 【32】什么是DataSet、DataAdapter?两者联系?答:过签名标识;通过元素访问来访问;必须为实例成员;索引器的get访问器具有与索引器相同的形参表;除DataAdapter:数据适配器,数据库与DataSet间的桥value参数外,索引器的set访问器还具有与索引器梁,把数据库中数据下载到DataSet或回传回去。相同的形参表。【33】用户登录和密码修改(带数据库)【17】静态数据成员特点?答:为所有类所共享,区用户登录 【18】构造函数的特点?答:(1)构造函数名与类名UserName='“ + txtUsername.Text.Trim().ToLower()+ ”' and UserPwd='“ + txtPassword.Text.Trim()+ 【19】析构函数的特点?答:(1)析构函数名是在类”'“;if(OperateDB.ExecuteReader(sql))型(默认为空)和修饰符;(3)析构函数不能被重载。{username = txtUsername.Text.Trim().ToLower();【20】什么是方法的重载?重载的特点是什么?答: frmMain frm = new frmMain();frm.Show();this.Hide();} 定义一组方法。重载的特点:1)位于同一类中;2)else
方法名相同;3)方法参考列表不同,包括参数个数不{MessageBox.Show(”用户名或密码错误“, ”出错了“, 同和参数类型不同;4)与方法返回值和修饰符没关系。MessageBoxButtons.OK, MessageBoxIcon.Error);} 【21】虚函数的特点?答:1)虚方法前不允许有修改密码: 修饰符;2)虚方法不能是私有的,因此不能使用private修饰符; where UserName='” + frmLogin.username + “' and 【22】抽象类和抽象方法的主要特点?答:抽象类:UserPwd='” + txtOldPwd.Text.Trim()+ “'”;(或者if(OperateDB.ExecuteReader(sqlCheckPwd))说,不能产生对象。但是,它可以有构造函数。(2){string sql = “update UserInfo set UserPwd='” 设计abstract类的目的是为了被继承。抽象方法:是+ txtNewPwd.Text.Trim()+ “' where UserName='” + 不完整的,不能执行的。frmLogin.username + “'”;
if(OperateDB.ExecuteNonQuery(sql)== 1)
{MessageBox.Show(“密码修改成功!”);}else
{ MessageBox.Show(“密码修改失败!”);}}
else{MessageBox.Show(“旧密码不正确!”);}
【34】抽象类定义和继承使用
特点:1.没有被完整定义,因而它不能用来实例化,或者说,不能产生对象。(但是,它可以有构造函数。)2.设计abstract类的目的是为了被继承。public abstract class Employee{public virtual void Pay(){ }
public abstract void CalculatePay();} public class HourlyEmployee: Employee
{public override void Pay(){CalculatePay();}public override void CalculatePay(){ }} 【35】接口及继承类的使用
特定功能的抽象成员的集合。一个类可以继承多个接口,从而获得多个行为的描述,将它们组合成新的功能并在类中实现。继承类中必须实现接口中的所有抽象成员。
定义接口的格式:修饰符 interface 接口名:基接口列表 {接口体} 其中,接口体的声明可以包括:接口方法声明;接口属性声明;接口事件声明;接口索引器声明
public delegate void
StringListEvent(IStringList sender);public interface IStringList{ void Add(string s);//方法int Count{get;}//属性event StringListEvent Changed;//事件string this[int index]{get;set;}//索引器} 【编程题例题】
定义一MobilePhone类,包括属性成员——网络类型(NetworkType),字段成员——屏幕尺寸(screenSize)、手机品牌(brand),手机型号
(brandModel),公共方法成员——Open、Close。其中screenSize为单位是英寸的双精度数,brand为字符串,NetworkType只能是“GSM”或“CDMA”字符串。要求:(1)在此类中包含构造函数,构造函数用于对数据(屏幕尺寸、手机品牌和手机型号)进行初始化。(2)公共成员方法中输出相应提示信息(参见(3)中的输出结果格式)。(3)写一测试类,在类中实例化一MobilePhone对象,最后能在DOS界面下显示如下结果:诺基亚N81(屏幕尺寸2.0英寸),是一款GSM手机。手机关机了。using System;
public enum NetworkType {GSM,CDMA,}
public class MobilePhone {public double screenSize;public string brand;
public string brandModel;
public NetworkType networkType;public NetworkType NetworkType{get { return networkType;}}
public MobilePhone(double ss, string bra, string bm, NetworkType nt){screenSize = ss;brand = bra;brandModel = bm;networkType = nt;}public void Open()
{Console.WriteLine(“{0}{1}(屏幕尺寸{2}英寸),是一款{3}手机.”,brand,brandModel,screenSize.ToString(“.0”), networkType);}
public void Close()
{Console.WriteLine(“手机关机了。”);} }
public class Test
{public static void Main()
{MobilePhone mp = new MobilePhone(2.0, “诺基亚”, “N81”, NetworkType.GSM);mp.Open();mp.Close();
System.Console.ReadLine();} }
【例】写一名为Desk的类,包含两个字段Length(双精度类型)、Height(双精度类型)。再写一继承类ComputerDesk类。ComputerDesk类除了有Length和Height外,还有KeyboardTray(字符串类型)。Public class desk {double length;double height;}
Public class computerdesk:desk {string keyboardtray}
第三篇:C# .net学习进程(个人总结)
第一步 掌握一门.NET面向对象语言,C#。
绝不提倡在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET。ASP.NET是一个全面向对象的技术,不懂OO,那绝对学不下去!
第二步 对.NET work类库有一定的了解
可以通过开发Windows Form应用程序来学习.NET work。ASP.NET是建构在.NET work之上的技术,你对.NET work了解得越深,学习ASP.NET就越快。
举个例子:下面简单列出几个对掌握ASP.NET非常重要的概念:
对象的内存模型,委托,事件,多线程,程序集和应用程序域,安全模型
.NET work当然还有许多其它的东西,但不理解与把握清楚上述这些东西,是很难真正把握ASP.NET的。
出于急迫的心情与现实的考虑,不少人没有扎实的面向对象基础就想直接学习ASP.NET,其结果只能是欲速则不达。
在具备了OO基础之后,以下是具体的学习ASP.NET技术步骤。
第一步:学习HTML与CSS 这并不需要去学一大堆的诸如Dreamweaver,Firework之类的各种网页设计工具,关键是理解HTML网页嵌套的block结构
与CSS的box模型。许多ASP.NET控件最后都必须转化为HTML。而且,div+CSS是当前主流的网页布局模型。学习这部分时,关键在于理解概念,而不需要将精力花在美化页面的许多技巧上,那是网站美工的工作,不是程序员的工作。
第二步:学习javascript。
javascript不是Java,它主要运行于浏览器端。可以完成许多工作,功能也很强大:比如它将客户端网页中的HTML元素
看成一棵树,可以编写代码访问并修改树节点,动态生成新的HTML代码,从而达到动态修改网页显示特性的目的。
Java在目前的网站开发中用得很多,非常重要。另外,它也是目前非常流行的AJAX技术的基础。
第三步:学习计算机网络原理
找一本大学<计算机网络>教材,重点看看它的有关互联网的部分,了解一些域名解析和HTTP协议等知识。这是进行互 联网开发的理论基础。
第四步:学习ASP.NET表示层技术,会设计Web页面
需要结合先前打好的面向对象技术的基础,至少掌握以下内容:
(1)各种Web控件的使用方法,(2)理解信息在网页中的传送方式,比如,ViewState,Session等的使用。
(3)ASP.NET应用程序与网页的生命周期,以及相关对象(比如httpcontext,response,request)的用途。
(4)ASP.NET实现事件驱动的内幕
(5)自定义用户控件
再次强调一下,没有OO基础,很难掌握上述技术,就只能被这些东东牵着鼻子走了,会很被动。
第五步 掌握数据库技术
具体地说,要学习以下内容:
(1)学会使用SQL Server 2005:不要求精通它的各种工具与管理配置技术,但至少知道如何连接,如何建表,如何
创建存储过程
(2)学习ADO.NET,掌握使用代码人工访问数据库(别用VS2005的向 导)的方法
(3)学习数据绑定控件的使用
第六步 理解多层架构
这时,先前在几个学习阶段涉及到的程序集与应用程序域等就派上用场了,现在,网站架构大多采用多层架构:表示层、业务逻辑层、数据存取层以及数据库本身。可以先上网找一此多层架构的资料看,再找一个现成的比较复杂的开源ASP.NET 项目分析一下其架构就差不多了。基本上都是一个套路,到处应用。有的朋友问:学习架构是不是必须学习设计模式。我的看法是:不必!当然,你如果学习过设计模式,那当然更好。但在
实际开发中,如果只想着机械地套用某种模式,反而起不到好的结果。我的观点:在学习设计模式时要多思多悟,其思想 就会渐渐地融入你的大脑,在真实的设计实践中,忘掉所有的写在书上的模式,一切从实际出发,相信你的直觉,只要达
到设计要求的方案就是可行的方案,事实上,你这样做了之后,回过头来再看,会发现你的设计往往暗合设计模式的理论。
第七步 学习XML与Web Service 先了解XML的基础知识,找本讲XML的书看一下就差不多了,然后,再学习Web Service。Web Service其实可类比为远程
方法调用(以XML格式表达的调用信息)。学到了这里,如果你还有兴趣,不妨再去看看SOA,不过SOA的资料都是理论与概
念,看起来比较郁闷,而且离实际开发可能比较远。所以,这是可选项。
第八步 学习AJAX 学习AJAX的主要目的是创建具有更丰富特性的Web表示层,而经过前面七步的学习,到此再学习AJAX已水到渠成,所有 的基础都已具备,不会有太大的问题了。
在基础未具备的前提下直接学AJAX,就象“浮沙之上筑高台”,所以,将AJAX的学习次序安排在这里。
第九步 学习RIA技术
RIA:Rich internet application,可看成是将C/S与B/S优点合二为一的尝试。就具体技术来说,主要指微软的
Silverlight(WPF_E),毕竟前头一路行来都是微软路线。
以上为初学者接触.NET技术的一个比较完整的学习步骤,个人能力有限只限于爱好软件编程和.NET、c#、asp.net,ado.net、asp和数据库的人士参考!
第四篇:net(c#)跨页面传值方法总结
.net(c#)跨页面传值方法总结(2011-04-25 11:03:24)转载标签: it 方式1:
在接收页 的html代码里加上一行: <%@ Reference Page = “WebForm1.aspx” %>
WebForm1 fp=(WebForm1)Context.Handler;this.TextBox1.Text=fp.name;//name 是第一页的public变量
Context 提供对整个当前上下文(包括请求对象)的访问。您可以使用此类共享页之间的信息。
方式2:GET方式 在发送页
public int sum=0;
int i =int.Parse(this.TextBox1.Text)*2;
Server.Transfer(“WebForm2.aspx?sum=”+i);
接收页
this.TextBox1.Text=Request[“sum”].ToString();or this.TextBox1.Text=Request.Params[“sum”].ToString();this.TextBox1.Text=Request.QueryString[“sum”];
方法3:全局变量
发送页:
Application[“sum”]=this.TextBox1.Text;Server.Transfer(“WebForm2.aspx”);
接收页:
this.TextBox1.Text=(string)Application[“sum”];
Application实质上是整个虚拟目录中所有文件的集合,如果想在整个应用范围内使用某个变量值,Application对象将是最佳的选择
方法4:
发送页:
1.定义静态变量: public static string str=“";2.str=this.TextBox1.Text;Server.Transfer(”webform2.aspx“);接收页:
1.引入第一页的命名空间:using WebApplication1;2 this.TextBox1.Text=WebForm1.str;
另外三种最常见的传值
ASP.NET WEB FORMS 给开发者提供了极好的事件驱动开发模式。然而这种简单的应用程序开发模式却给我们带来了一些小问题,举个例子,在传统的ASP应用程序中,你能够通过 POST方法很容易的把一个值或多个值从一个页面传送到另一个页面(request()/request.form()/request.querystring()),用同样的方法在ASP.NET中实现有点麻烦。在这里,通过其他方式来解决这种情形。ASP.NET为我们提供了三种方式,一种是可以通过用QueryString来传送相应的值,再一种是通过session变量来传送相应的值,还有就是通过 Server.Transfer方法来实现。
一、使用Querystring
Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。下面通过一个小例子来完成传值工作,步骤如下:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件
代码如下:
private void button_click(object sender,System.EventArgs e){ string url;url=”webform2.aspx?name=“+TextBox1.Text + ”&Email=“+TextBox2.Text;Response.Redirect(url);}
4、新建一个目标页面命名为webform2
5、在webform2中放置两个Label1,Label2 在webform2的Page_Load中添加如下代码:
private void Page_Load(object sender,System.EventArgs e){ Label1.Text=Request.QueryString[”name“];Label2.Text=Request.QueryString[”Email“];} 运行,即可看到传递后的结果了。
二、使用Session变量
使用Session变量传值是一种最常见的方式了,此中方式不仅可以把值传递到下一个页面,还可以交叉传递到多个页面,直至把Session变量的值removed后,变量才会消失。举个例子看看:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件 代码如下:
private void button_click(object sender,System.EventArgs e){ Session[”Name“]=TextBox1.Text;Session[”Email“]=TextBox2.Text;Response.Redirect(”webform2.aspx“);}
4、新建一个目标页面命名为webform2
5、在webform2中放置两个Label1,Label2 在webform2的Page_Load中添加如下代码:
private void Page_Load(object sender,System.EventArgs e){ Label1.Text=Session[”Name“].ToString();Label2.Text=Session[”Email“].ToString();Session.Remove(”Name“);Session.Remove(”Email“);} 运行,即可看到传递后的结果了。
三、使用Server.Transfer
虽然这种方法有点复杂,但也不失为一种在页面传值的方式。举个例子看看:
1、创建一个web form
2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2
3、为button按钮创建click事件 代码如下:
private void(object sender,System.EventArgs e){ Server.Transfer(”webform2.aspx“);}
4、创建过程来返回TextBox1,TextBox2控件的值代码如下: public string Name { get {return TextBox1.Text;} } public string Email { get{return TextBox2.Text;} }
5、新建一个目标页面命名为webform2
6、在webform2中放置两个Label1,Label2 在webform2的Page_Load中添加如下代码:
private void Page_load(object sender,System.EventArgs e){ //创建webform的实例 webform1 wf1;//获得实例化的句柄
wf1=(webform1)Context.Handler;Label1.Text=wf1.Name;Label2.Text=wf1.Email;}
常见的就是这三种方法。
上面方法一中的传值问题
问:在asp中页面间传值使用url?方式 例如 ”index.asp?aaa=华东五市+水乡六日游“ 因为字符串”华东五市+水乡六日游“中间有加号,与asp系统字符串连接符关键字冲突,传过去的变量aaa的值就会变成”华东五市“,请问大家有什么解决办法? 解决:
1.server.urlencode(”华东五市+水乡六日游“)
2.URLEncode The URLEncode method applies URL encoding rules, including escape characters, to a specified string.Syntax Server.URLEncode(string)
Parameters string Specifies the string to encode.Example The following script
<%Response.Write(Server.URLEncode(”http://www.xiexiebang.com“))%>
produces the output
http://www.xiexiebang.com
3.index.asp?aaa=华东五市+水乡六日游 4.自己定义一些特殊字符对应 ”+“,”*“,”#“ 例如,Replace(string,”+“,”CODE01“)
然后到另一个页面在用Replace(string,”CODE01“,”+“)换回来即可了 自己定义一些特殊字符对应 ”+“,”*“,”#“ 例如,Replace(string,”+“,”CODE01“)
然后到另一个页面在用Replace(string,”CODE01“,”+“)换回来即可了
在页面间传递引用
有不少文章讨论怎么在两个页面间传递引用,如果你页面上的对象设置为public的话,你就可以传递他们在页面间。
在页面间传递是使用
Server.Transfer替代Response.Redirect就可以。例子:
-------------In Page A codebehind:
public class PageA : System.Web.UI.Page { public System.Web.UI.WebControls.TextBox TextBox1;public System.Web.UI.WebControls.Button Button1;
// standard page code(Page_Load, etc)//....//....private void Button1_Click(object sender, System.EventArgs e){ Server.Transfer(”b.aspx“);} }
-------------In Page B codebehind:
private void Page_Load(object sender, System.EventArgs e){ PageA myAPage = Context.Handler as PageA;string textboxFromPageA = myAPage.TextBox1.Text;}
因为当使用Server.Transfer时所有的对象(A and B)在服务器上当时都是活动的,你可以引用任何东西。
稍微修改一下b.aspx(uestc95 提供):
Page myPage =(Page)Context.Handler;string textboxFromPageA;textboxFromPageA =((TextBox)myPage.FindControl(”TextBox1“)).Text;
这样在A.aspx中就可以正常的使用protected类型的了
###
1.使用QueryString变量
QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子: a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e){ string s_url;s_url = ”b.aspx?name=“ + Label1.Text;Response.Redirect(s_url);}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e){ Label2.Text = Request.QueryString[”name“];}
2.使用Application 对象变量
Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e){ Application[”name“] = Label1.Text;Server.Transfer(”b.aspx“);}
b.aspx中C#代码 private void Page_Load(object sender, EventArgs e){ string name;Application.Lock();name = Application[”name“].ToString();Application.UnLock();}
3.使用Session变量
想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e){ Session[”name“] = Label.Text;}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e){ string name;name = Session[”name“].ToString();}
4.使用Cookie对象变量
这个也是大家常使用的方法,与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e){ HttpCookie cookie_name = new HttpCookie(”name“);cookie_name.Value = Label1.Text;Reponse.AppendCookie(cookie_name);Server.Transfer(”b.aspx“);}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e){ string name;name = Request.Cookie[”name“].Value.ToString();}
5.使用Server.Transfer方法
这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。a.aspx的C#代码 public string Name { get{ return Label1.Text;} } private void Button1_Click(object sender, System.EventArgs e){ Server.Transfer(”b.aspx");}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e){ a newWeb;//实例a窗体
newWeb =(source)Context.Handler;string name;
第五篇:第二阶段WEB开发基础学习总结
WEB开发基础学习总结
第二阶段任务:学习掌握HTML、CSS、JavaScript等与web开发相关的基础知识。在第二阶段的学习中,主要都是针对web开发基础的知识,其中html用于来表现网页的结构与内容,css用来控制页面的外观和表现,javascript用来控制页面的行为。其中分别针对每一部分分别总结如下:
HTML的学习总结:
(1)、HTML、XHTML的不同:
①XHTML中属性名称必须小写;
②XHTML属性值必须加引号 ③XHTML属性不能简写;
④XHTML在属性中增加了ID属性,它可以取代name的功能; ⑤XHTML DTD 定义了强制使用的 HTML 元素。
总的来说,XHTML比HTML更加严格与规范。它只着重强调用来表现网站的结构而非样式,样式的内容交由CSS来控制。
(2)、HTML中注释的形式是:,注释部分的内容,将不会显示在网页中。(3)、HTML中的标签有两种形式:
②不带结束标记的标签,如:
,
etc。
在标签内部,可以是允许的属性=“值”对出现。最重要的几个标签如下: