C#开发学习——.net C#中页面之间传值传参的方法以及内置对象

时间:2023-03-08 22:15:53
1.QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子:
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"];
}
query传值又分类post ,get格式如:
//post请求
string name = Request["name"].toString();
string name =Request.Form.Get("name").toString();
//get请求
string name = Request.QueryString["name"].toString();
但我发现 不论是post 和 get 传值都可用
string name = Request["name"].toString();
表单提交中get和post方式的区别归纳如下几点:
1. get是从服务器上获取数据,post是向服务器传送数据。 
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。 
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。 
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。 
5. get安全性非常低,post安全性较高。
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; name = newWeb.Name;
}
下面介绍一下传值缺点和优点
cookie
     方式:将数据存在客户端的经典方法。
     缺点:安全性低、受客户端设置限制、一个站点仅存20个cookie,每个容量4096字节。
Session
     方式:将用户数据存储在服务端。
     特点:asp.net中可以设置session的存储方式、位置、SessionID的保存是否依赖cookie。
             可以直接存储对象。 
     缺点:asp.net中有失效的隐患
Cache
     方式:将用户数据存储在服务端数据缓存中。 
     特点:可以大大提高效率。 可以直接存储对象。
Appliction
     方式: 将数据存储于此,相当于全局变量。 
     特点:可以直接存储对象。整个站点的共享数据
ViewState
     方式:asp.net特有机制,用来恢复页面状态。 
     特点:将页面各控件及其所存数据序列化存在name为_ViewState的隐藏域中。
     缺点:存在HTML中,安全性较低。可以设置加密和验证,但数据量会大增、效率有影响。
Static
     方式: 将数据存于静态变量中。 
     特点:利于提高效率。
     缺点:若用不好会致使用户或页面间数据紊乱,造成极大的隐患。建议只赋值一次,绝对禁止为单个用户而更改此值。
ASP.NET 内置对象包括 1.Response 2.Request  3.Server  4.Application   5.Session   6.Cookie
1 Request对象主要是让服务器取得客户端浏览器的一些数据,包括从HTML表单用Post或者GET方法传递的参数、Cookie和用户认证。
2 Request对象是Page对象的成员之一。
3 程序中不需要做任何的声明即可直接使用;其类名为 HttpRequest属性很多,但方法很少,只有一个BinaryRead()
1.使用Request.Form属性获取数据
  通过该属性,读取之间的表单数据.
注意:提交方式要设置为“Post”。与Get方法相比较,使用Post方法可以将大量数据发送到服务器端
2.利用Request.QueryString属性获取数据
  Request对象的QuerySting属性可以获取 HTTP 查询字符串变量集合 。 通过该属性,我们可以读取地址信息  http://localhost/aaa.aspx?uid=tom&pwd=abc其中标识为红色部分的数据.注意:提交方式要设置为“Get”
3.问题:Request.Form用于表单提交方式为Post的情况,而Request.QueryString用于表单提交方式为Get的情况,如果用错,则获取不到数据。
解决方法:利用Request(“元素名”)来简化操作。
Response对象:将数据从服务器发送到浏览器
     1. <%=…%>Response.Write("alert('欢迎学习ASP.NET')")
   Response.Write(" ")
  2.Response对象的Redirect方法将客户端浏览器重定向到另外的URL上,即跳转到另一个网页。例如:Response.Redirect("http://www.example.com/") 
  3. Response.End() 终止当前页的运行
  4.Response.WriteFile(FileName)其中:FileName 指代需向浏览器输出的文件的文件名
Server对象提供对服务器上的方法和属性进行的访问 .其类名称是HttpServerUtility.
  Server对象的主要属性有
  MachineName:获取服务器的计算机名称。
  ScriptTimeout:获取和设置请求超时(以秒计)。
方法名称 说明
  CreateObject 创建 COM 对象的一个服务器实例。
  Execute 执行当前服务器上的另一个aspx页,执行完该页后再返回本页继续执行
  HtmlEncode 对要在浏览器中显示的字符串进行HTML编码并返回已编码的字符串。
  HtmlDecode 对HTML编码的字符串进行解码,并返回已解码的字符串。
  MapPath 返回与 Web 服务器上的指定虚拟路径相对应的物理文件路径。
  Transfer 终止当前页的执行,并为当前请求开始执行新页。
  UrlEncode 将代表URL的字符串进行编码,以便通过 URL 从 Web 服务器到客户端进行可靠的 HTTP 传输。
  UrlDecode 对已被编码的URL字符串进行解码,并返回已解码的字符串。
  UrlPathEncode 对 URL 字符串的路径部分进行 URL 编码,并返回已编码的字符串。
  编码:Server.HtmlEncode(“HTML代码”)
  解码:Server.HtmlDecode(“已编码的HTML”)
  1.Server对象的MapPath方法将虚拟路径或相对于当前页的相对路径转化为Web 服务器上的物理文件路径。 
语法:
Server.MapPath(“虚拟路径”)
String FilePath
FilePath = Server.MapPath(“/”)
Response.Write(FilePath)
Application对象在实际网络开发中的用途就是记录整个网络的信息,如上线人数、在线名单、意见调查和网上选举等。在给定的应用程序的多有用户之间共享信息,并在服务器运行期间持久的保存数据。而且Application对象还有控制访问应用层数据的方法和可用于在应用程序启动和停止时触发过程的事件。
 1.使用Application对象保存信息Application(“键名”) = 值或Application(“键名”,值)
获取Application对象信息变量名 = Application(“键名”)
或:变量名 = Application.Item(“键名”)
或:变量名 = Application.Get(“键名”) 更新Application对象的值
  Application.Set(“键名”, 值)
  删除一个键
  Application.Remove(“键名”, 值)
  删除所有键
  Application.RemoveAll()或Application.Clear()
2.有可能存在多个用户同时存取同一个Application对象的情况。这样就有可能出现多个用户修改同一个Application命名对象,造成数据不一致的问题。HttpApplicationState 类提供两种方法 Lock 和 Unlock,以解决对Application对象的访问同步问题,一次只允许一个线程访问应用程序状态变量。
  关于锁定与解锁
  锁定:Application.Lock()
  访问:Application(“键名”) = 值
  解锁:Application.Unlock()
  注意:Lock方法和UnLock方法应该成对使用。  可用于网站访问人数,聊天室等设备。
3. 使用Application事件 
  在ASP.NET 应用程序中可以包含一个特殊的可选文件——Global.asax 文件,也称作ASP.NET 应用程序文件,它包含用于响应 ASP.NET或HTTP模块引发的应用程序级别事件的代码。Global.asax 文件提供了7个事件,其中5个应用于Application对象 
  事件名称 说明
  Application_Start 在应用程序启动时激发
  Application_BeginRequest 在每个请求开始时激发
  Application_AuthenticateRequest 尝试对使用者进行身份验证时激发
  Application_Error 在发生错误时激发
  Application_End 在应用程序结束时激发
Session即会话,是指一个用户在一段时间内对某一个站点的一次访问。
Session对象在.NET中对应HttpSessionState类,表示“会话状态”,可以保存与当前用户会话相关的信息。
Session对象用于存储从一个用户开始访问某个特定的aspx的页面起,到用户离开为止,特定的用户会话所需要的信息。用户在应用程序的页面切换时,Session对象的变量不会被清除。对于一个Web应用程序而言,所有用户访问到的Application对象的内容是完全一样的;而不同用户会话访问到的Session对象的内容则各不相同。Session可以保存变量,该变量只能供一个用户使用,也就是说,每一个网页浏览者都有自己的Session对象变量,即Session对象具有唯一性。
(1)将新的项添加到会话状态中
   语法格式为:
  Session ("键名") = 值
  或者
  Session.Add( "键名" , 值)
(2)按名称获取会话状态中的值
  语法格式为:
  变量 = Session ("键名")
  或者
  变量 = Session.Item("键名")
(3)删除会话状态集合中的项
  语法格式为:Session.Remove("键名")
(4)清除会话状态中的所有值
  语法格式为:Session.RemoveAll()
  或者Session.Clear()
(5)取消当前会话
  语法格式为:Session.Abandon()
(6)设置会话状态的超时期限,以分钟为单位。
  语法格式为:Session.TimeOut = 数值
  Global.asax 文件中有2个事件应用于Session对象
  事件名称 说明
  Session_Start 在会话启动时激发
  Session_End 在会话结束时激发
 Cookie就是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户的电脑上保存信息并且随后再取回它。信息的片断以‘键/值’对的形式存储。
  Cookie是保存在客户机硬盘上的一个文本文件,可以存储有关特定客户端、会话或应用程序的信息,在.NET中对应HttpCookie类。
有两种类型的Cookie:会话Cookie(Session Cookie)和持久性Cookie。
前者是临时性的,一旦会话状态结束它将不复存在;
后者则具有确定的过期日期,在过期之前Cookie在用户的计算机上以文本文件的形式存储。在服务器上创建并向客户端输出Cookie可以利用Response对象实现。
HttpCookie cookie = Request.Cookie["user"];//创建cookie对象
cookie.Expires = DateTime.MaxValue;//设置过期时间
cookie.Values.Add("Iaddress",a);//添加Cookie值
Response.AppendCookie(cookie); //将cookie添加到服务器相应
response.cookies[""].Values = 数据;//写入数据,将服务器端的数据写入客户端
string c =request. cookie.Values["address"];//读取数据