页面间传值

---------------------页面间传值

asp.net状态保存方法:
ASP.NET状态保存分为客户端保存和服务器端保存两种:

使用客户端选项存储页信息而不使用服务器资源的这些选项往往具有最低的安全性但具有最快 的服
务器性能,因为对服务器资源的要求是适度的。但是,由于必须将信息发送到客户端来进行存储,
因此对于以这种方式可以存储多少信息存在一定的客观限制。

客户端保存的方式一般有如下4种:

1     ViewState:

利用场合为:在对同一页的多个请求间自动保留值,多用于客户端的一些事件。,典型利用场合
为:页面信息重置, 登陆出错次数统计,Grid列排序等。

优点:不利用服务器端资源,实现简单,相对高的安全性:因为经过哈希计算和压缩,并且针对
Unicode 实现进行编码。

缺点:因为ViewState存储在页面本身,所以无法存储较大的值。并且通过源文件可以看见其中的值
,虽然经过哈希计算和压缩,但仍有被篡改的风险。

可存储的类型:string,integer,bool,array,arr aylist,hashtable以及其他可以序列化的类型。

2     HiddenField:

利用场合为:存储少量页面 中经常改动的信息,多和客户端脚本一块使用,典型利用场合为:客户
端经历一系列验证之后向服务器端回发,服务器端从客户端HiddenField中获取值,进行处理。例如
:LeyserHomepage中,要删除一项产品,需要在客户端弹出确认Form,用户确认之后再PostBac k回
服务器端进行数据库Delete操作,当用户确认要删除时,将当前要删除的产品ID存放到一个
HiddenField中,然后执行 Form(0).submit回发到服务器端,服务器端再从HiddenField获取产品ID
值,进行数据库操作。

优点:不使用服务器资源 ,广泛支持,实现简单

缺点:安全性不高,因为它被包含在页面上进行发送,所以可以通过源文件看见他的内容。存储结
构少,仅仅支持string,integer,bool,array,arraylis t等简单的数据结构。并且在其上只存放简
单的单值,若要存放多值,需要额外编码。存储量少,因为它被存储在页面本身,所以 无法存储较
大的值。而且大的数据量会受到防火墙和代理的阻止。 注意: 使用了HiddenField之后,需要回发
到服务器进行 处理,应该使用Http Post方法而不是Http Get方法(通过URL请求访问)

3     Cookie:

利用场合为:存储少量页面中经常改动的信息,典型利用场合为:为登陆过的网站保存登陆用户
名,为用户输入提供方便 ,还有在一些用户自定义项目上保存用户的个性化设置。

优点:不使用服务器资源,实现简单,可配置到期时间。

缺点:大小受到限制,一般浏览器支持的最大的Cookie 容量为4096字节。客户端用户可能会配置为
拒绝Cookie。安全性:保存在客户端的信息可能会被恶意用户修改或者获取,所以不应该保存敏感
信息。持久性:保存期限受到客户端的配置影响。

Cookie 通常用于 存取已知用户自定义内容的个性化情况。在大多数此类情况中,Cookie 是作为
“标识”而不是“身份验证”,所以在 Cookie 中只存 储用户名、账户名或唯一用户 ID(例如
GUID)并使用它来访问站点的用户个性化结构是足够的了。

4     QueryString:

利用场合为: 将信息从一页传递给另一页的最简单的方法。

优点:不使用服务器资源,支持广泛,实现简单

缺点:安全性,因为直接在URL中暴露给用户 ,所以有被篡改的风险。容量有限,一般的浏览器都
有255个字符的限制。只有在通过其 URL 请求页时查询字符串才是可行的选择。不能从已提交给服
务器的页读取 查询字符串。

 

视图状态:需要为将回发到自身的页存储少量信息。ViewState 属性的使用将提供具有基本安全性的
功能。  

隐藏域:需要为将回发到自身或另一页的页存储少量信息,并且不需要较高的安全性。 (客户端事
件)只能在提交到服务器的页上使用隐藏域。 

Cookie:需要在客户端存储少量信息并且不需要较高的安全性。(个性化)    

查询字符串: 可以将少量信息从一页传输到另一页,并且不需要较高的安全性。 (页面跳转 )只
有在请求同一页,或通过链接请求另一页时,才能使用查询字符串。 
服务器端保存方式一般有如下3种:

存储页信息的服务器端选项往往比客 户端选项具有更高的安全性,但它们可能使用更多的 Web 服
务器资源,这可能在信息存储量较大时导致可缩放性问题。

1     Application:

利用场合:所有的请求都会需要的 一些共有资源,由最先的一个请求率先获取之后,拿出来共享,
其他的请求就不用浪费资源进行再次获取。典型利用场合:一个股市 Web 站点可能在一天中每 5
分钟从数据库获取大量的金融股票信息(也许是 40 MB 的数据),然后将这些信息缓存在应用程序
状态中,这样所有以后的查找请求都可以在应用程序状态中访问这些信息。其结果是极大地提高了
每个 请求的性能,因为传入的请求不需要跨进程、跨计算机或数据库的往返过程。

        '首次Http Get請求

        If Not Me.IsPostBack Then

            '先判断Application中是否已経有了緩存

            If Application.Item("Database") Is Nothing Then

                '若没有,从DataCenter中獲取

                Dim ds As New DataSet

                ds.ReadXml(Server.MapPath("TestData.xml"))

                Dim dv As New DataView(ds.Tables(0))

                '拿到之后, 緩存到Application,方便別的进程Http Get請求復用

                Application.Add("DataBase", dv)

            End If

            Dim dv1 As DataView

            dv1 = Application.Item("DataBase")

            '緩存到Session, 方便当前进程的Http Post請求

            Session.Add("DataBase", dv1)

        End If

优点:易于实现,全局范围。

缺点:持久性,若 保存数据的服务器端进程被强行关闭,那么数据就会丢失,所以利用
Application一定要有保底的策略,有的话就使用,没有的话就自己拿。耗用服务器端的内存。

注意:因为Application中的数据被多个进程公用,所以若需要更新其中的值时,需要利用 如下的
语句,做到独占更新:

                Application.Lock()

                Application.Item("DataBase ") = NewDataBase

                Application.UnLock()

2     Session:

利用场合:单独的一个进程内部使用,存储单独会话的短期的、敏感的数据。

优点:易于实现,持久性,可以应对IIS重启和辅助进程重启, 可在多进程中使用

缺点:耗用服务器端的内存。

3     Database:

优点:安全性。 容量。 持久性。 可靠性和数据完整性。 可访问性。 广泛支持。

缺点:复杂,性能

方法    使用场合      

应用程序状态    存 储更改不频繁的全局信息,这些信息由多个用户使用,此时安全性不成为问
题。不要在应用程序状态中存储大量的信息。  

会话状态        存储特定于单独会话的短期信息,并且需要较高的安全性。不要在会话状态中存
储 大量的信息。在支持许多用户的应用程序中,这可能会占用大量服务器资源并影响可缩放性。    

数据库支持      存储大量信息,管理交易,或者信息必须可以经受得住应用程序和会话重新启
动。数据挖掘十分重要,并且需要较高的安全性。
---------------------------------------------------------
server.trasfer:
public string Id
    { get { return this.TextBox1.Text; } }

Default2.aspx引用指令
<%@ Reference Page="~/Default.aspx" %>
protected void Page_Load(object sender, EventArgs e)
    {
        _Default d;//属性传值,这里引用类名,不是web名
        d = (_Default)Context.Handler;
        this.Label1.Text = d.Id;
       
    }
-----------------------------------------------------------
页面间传值区别
QueryString[]值在地址栏中显示,不安全,不能传递对象,只能传值,用于安全性要求不高,值小

Application[]作用于全局,接收时要先上锁,Application.Lock();后释放锁Application.UnLock
();
Session[]作用于用户端,存放在服务器上,占内存,少用,且用完要释放资源Session.RemoveAll
()或Session.Remove("id");;
Cookice存放在客户端,占用资源较少
server.transfer可以对象属性的方式传值,用属性get,
------------------------------------------------------------------
viewstate
viewstate变量传值
Default.aspx页面
protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("Default2.aspx?id=2");
    }
    Default2.aspx页面
    protected void Page_Load(object sender, EventArgs e)
    {
        ViewState["id"] = Request.QueryString["id"].ToString();
        Response.Write(ViewState["id"].ToString());
    }
-------------------------------------------------Demo
protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("Default2.aspx?name="+"n"+"&pwd="+"p");
    }
protected void Page_Load(object sender, EventArgs e)
    {
        string url = Request.QueryString["pwd"].ToString();
        Response.Write(url);
    }
-----------------------------------------------
protected void Button1_Click(object sender, EventArgs e)
    {
        Session["name"] = "n";
        Response.Redirect("Default2.aspx");
    }
protected void Page_Load(object sender, EventArgs e)
    {
    session作用于用户个人,存在服务器,占用资源,用完释放
        string s = (string)Session["name"];
        Response.Write(s);
//用完要释放资源
         session.remove("name");
    }-----------------------------------------------
protected void Button1_Click(object sender, EventArgs e)
    {
        Application["name"] = "n";
        Response.Redirect("Default2.aspx");
    }
protected void Page_Load(object sender, EventArgs e)
    {//Application是全局变量,对所有用户 都有效,所以用时先上数据锁,最后释放锁
        Application.Lock();
        string s = Application["name"].ToString();
        Response.Write(s);
        Application.UnLock();
    }
-------------------------------------------------------
cookic同session变量一样,只是cookic在客户端,sssion在服务器端
cookic用时要同request一起用
protected void Button1_Click(object sender, EventArgs e)
    {
        HttpCookie cookie_name = new HttpCookie("name");
        cookie_name.Value = "n";
        Response.AppendCookie(cookie_name);
        Response.Redirect("Default2.aspx");

    }
protected void Page_Load(object sender, EventArgs e)
    {
        string s = Request.Cookies["name"].Value.ToString();
        Response.Write(s);
    }
----------------------------------------------------PreviousPageType指令页面间传值

思想:一个页传值到另一个页用PreviousPageType指令传值,属性传值,第一个页面:定义一个属性返回值,2:第二个页面PreviousPageType指令引用第一个页面
Default.aspx
<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">


   
<script runat="server">
    public string Name
    {
        get
        {
            return this.TextBox1.Text;
        }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" Text="请输入姓名" Width="183px"></asp:Label>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server"  Text="提交" PostBackUrl="~/Default3.aspx" /></div><!--页面跳转-->
    </form>
</body>
</html>
Default3.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %>
<%@ PreviousPageType VirtualPath="~/Default.aspx" %><!--指令页面间传值-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
   
    protected void Page_Load(object sender, EventArgs e)
    {
        this.Label1.Text = PreviousPage.Name;
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" ></asp:Label>
   
    </div>
    </form>
</body>
</html>
----------------------------------session

//Default.aspx
protected void Button1_Click(object sender, EventArgs e)
    {
        Session["name"] = this.TextBox1.Text;
        Session["pwd"] = this.TextBox2.Text;
       // Server.Transfer("Default2.aspx");
        Response.Redirect("Default2.aspx");
    }
//Default.aspx2
protected void Page_Load(object sender, EventArgs e)
    {
        this.Label1.Text = Session["name"].ToString();
        this.Label2.Text = Session["pwd"].ToString();
        Session.Remove("name");
        Session.Remove("pwd");
    }

 


//存session["name"]   =   "myname";  
  取string   strName   =   (string)session["name"];
--------------------------------------querystring

//Default.aspx
protected void Button1_Click(object sender, EventArgs e)
    {
        string url;
        url = "Default2.aspx?name=" + this.TextBox1.Text + "&pwd=" + this.TextBox2.Text ;
        Response.Redirect(url);
    }
//Default.aspx2
protected void Page_Load(object sender, EventArgs e)
    {
        this.Label1.Text = Request.QueryString["name"];
        this.Label2.Text = Request.QueryString["pwd"];
    }
---------------------------页面间全传值

protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("Default2.aspx?name="+"n"+"&pwd="+"p");
    }
protected void Page_Load(object sender, EventArgs e)
    {
        string url = Request.QueryString["pwd"].ToString();
        Response.Write(url);
    }
-----------------------------------------------
protected void Button1_Click(object sender, EventArgs e)
    {
        Session["name"] = "n";
        Response.Redirect("Default2.aspx");
    }
protected void Page_Load(object sender, EventArgs e)
    {
        string s = (string)Session["name"];
        Response.Write(s);
//用完要释放资源
         session.remove("name");
    }-----------------------------------------------
protected void Button1_Click(object sender, EventArgs e)
    {
        Application["name"] = "n";
        Response.Redirect("Default2.aspx");
    }
protected void Page_Load(object sender, EventArgs e)
    {//Application是全局变量,对所有用户 都有效,所以用时先上数据锁,最后释放锁
        Application.Lock();
        string s = Application["name"].ToString();
        Response.Write(s);
        Application.UnLock();
    }
-------------------------------------------------------
cookic同session变量一样,只是cookic在客户端,sssion在服务器端
cookic用时要同request一起用
protected void Button1_Click(object sender, EventArgs e)
    {
        HttpCookie cookie_name = new HttpCookie("name");
        cookie_name.Value = "n";
        Response.AppendCookie(cookie_name);
        Response.Redirect("Default2.aspx");

    }
protected void Page_Load(object sender, EventArgs e)
    {
        string s = Request.Cookies["name"].Value.ToString();
        Response.Write(s);
    }
----------------------------------------------------

控件名功能描叙RequiredFieldValidator(必须字段验证)用于检查是否有输入值CompareValidator(比较验证)按设定比较两个输入RangeValidator(范围验证)输入是否在指定范围RegularExpressionValidator(正则表达式验证)正则表达式验证控件CustomValidator(自定义验证)自定义验证控件ValidationSummary(验证总结)总结验证结果
-------------------------ViewState

viewstate变量传值
Default.aspx页面
protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("Default2.aspx?id=2");
    }
    Default2.aspx页面
    protected void Page_Load(object sender, EventArgs e)
    {
        ViewState["id"] = Request.QueryString["id"].ToString();
        Response.Write(ViewState["id"].ToString());
    }
----------------------------
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值