• ASP.NET之页面传值


    一、目前在ASP.NET中页面传值共有这么几种方式:

    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、Session共享

    发送页面:Session("param1") = "1111";  
    按收页面  string str = Session("param1").ToString();  
    优点:session的使用很简单,用户可以设置session的存储方式、位置、SessionID的保存是否依赖cookie。
             session可以直接存储对象。
    缺点:过量的存储会导致服务器内存资源的耗尽,在asp.net中有失效的隐患。
    3、Application共享
    Application对象的作用范围是整个全局,也就是说对所有用户都有效。
    发送页面: Application("param1") = "1111";   
    按收页面: string str = Application("param1").ToString();  
    此种方法不常使用,因为Application在一个应用程序域范围共享,所有用户可以改变及设置其值,故只应用计数器等需要全局变量的地方。
    4、Cookie
    与Session一样,是对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。
    而且Cookie的使用要配合ASP.NET内置对象Request来使用。
    设置Cookie:   HttpCookie cookie_name = new HttpCookie("name");
                       cookie_name.Value = Label1.Text;
                       Reponse.AppendCookie(cookie_name);
    获取Cookie:string name= Request.Cookie["name"].Value.ToString();
    优点:非常方便,存在于客户端,不占用服务器资源。
    缺点:并非所有的浏览器都支持Cookie;用户可以禁用和删除它;信息采用明文保存,安全性差。
    5、Server.Transfer()方式。
    这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,
    新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。
    Server.Transfer("target.aspx?param1=1111&param2=2222")
    接收页面: string str = Request["param1"]

    如果你用的是Server.Transfer,是不可能显示目标URL的,因为浏览器对这一无所知。
    如果你在A.aspx里面执行Server.Transfer("~/B.aspx"),实际相当于A.aspx告诉ASP.NET处理引擎,你帮我执行B.aspx吧,然后把结果给我,我再给用户。
    因此浏览器还是以为自己获取的是A.aspx,而实际上服务器帮A.aspx执行了B.aspx。

    Server.Transfer和Response.Redirect的区别:
    根本上,Response是叫浏览器去重新转向到指定的网页,而Server自然是发生在服务器端为主了,因此会有以下区别: 
    1. Server.Transfer只能够转跳到本地虚拟目录指定的页面,而Response.Redirect则十分灵活;
    2. Server.Transfer可以将页面参数方便传递到指定页面; 
    3. 使用时,Server.Transfer跳到别的页面后,浏览器显示的地址不会改变,有时反而会造成误会,当然也有些场合需要这样的效果; 
    4. Server.Transfer可以减少客户端对服务器的请求; 
    补充一下,Response.Redirect()需要在服务器和客户端往返两次 
    而Server.Transfer()在服务器端一次通信即可 
    使用Server.Transfer后,转向后的页面可以使用前一个页面的参数,有时候确实比较方便。
    转载:http://www.cnblogs.com/jiajiayuan/archive/2012/09/17/2688284.html
  • 相关阅读:
    线程池全面总结
    有状态(Stateful)与无状态(Stateless)
    Callable接口--有返回值的线程
    集合类--最详细的面试宝典--看这篇就够用了(java 1.8)
    [Android App]IFCTT,即:If Copy Then That,一个基于IFTTT的"This"实现
    应朋友死皮白咧地邀请贴一个招聘广告
    [Android]Android焦点流程代码分析
    [Android]Android内存泄漏你所要知道的一切(翻译)
    [Android]Gradle 插件 DiscardFilePlugin(class注入&清空类和方法)
    [Android]使用RecyclerView替代ListView(四:SeizeRecyclerView)
  • 原文地址:https://www.cnblogs.com/1030351096zzz/p/6568331.html
Copyright © 2020-2023  润新知