好象没有别的方法了,用cookie吧

解决方案 »

  1.   

    ViewState["xxx"] = xx
    不知道这个行不?
    还有就是定义一个全局的变量
      

  2.   

    在很多时候,您将需要从一页定位到另一页,将值从一页传递到另一页。例如,可能有一页会提示用户提供名称和密码。当用户提交窗体时,您需要调用另一页对用户进行身份验证。
    在页之间共享信息的方法有多种: 
    使用查询字符串,它将信息追加到 URL 并将该 URL 传递到下一页。这种方法存在使信息可见的缺点。有关详细信息,请参见 WebClient.QueryString 属性和 HttpRequest.QueryString 属性。 
    使用会话状态存储信息,使用户当前会话中的所有页都可以全局访问这些信息。但是,这种方法会占用服务器内存,并且信息仅在会话过期之前存储,从而比向下一页传递信息具有更多的系统开销。有关详细信息,请参见 Web 窗体状态管理。 
    使用自定义页属性,然后从初始页重定向到目标页,此时仍可以读取旧页上的值。此策略在本主题中描述。 
    Web 窗体页是应用程序中的类,因此可以向处理任何类一样为它们创建属性。但是,由于 Web 窗体页实际上仅在执行页的过程中存在,它们的生命周期非常短。因此,Web 窗体页上属性的用途相当有限,因为它们仅在处理页的过程中存在。但是,如果使用特定的技术将控件从一页传递到另一页,后一页仍可以访问前一页上的属性。
    在源页上创建可共享的值 
    在代码中,使用属性的标准语法声明页上的一项或多项只读属性。返回要向下一页传递的属性值。 
    以下示例显示如何声明名为 Property1 的属性并将它的值设置为该页上文本框的值: 
    ' Visual Basic
    Public ReadOnly Property Property1() As String
       Get
          Return TextBox1.Text
       End Get
    End Property// C#
    public string Property1
    {
       get
       {
          return TextBox1.Text;
       }
    }
    通过调用 Server 对象(HttpServerUtility 类)的 Transfer 方法调用下一页,并向其传递要将信息传递到的页的 URL。 
    以下示例显示如何从事件处理程序中调用名为 WebForm2 的页(在同一项目中): 
    ' Visual Basic
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Server.Transfer("Webform2.aspx")
        End Sub// C#
    private void Button1_Click(object sender, System.EventArgs e)
    {
       Server.Transfer("Webform2.aspx");
    }
    若要从所调用的页中获取第一页的属性值,请创建源页类的实例变量。然后可以向其分配 HTTP 对象(IHttpHandler 类的一个实例),即接收初始请求的对象。
    在所调用的页中读取源页中的属性值 
    创建一个全局实例变量,它被类型化为源页的类。 
    以下示例显示如何声明类型为 WebForm1 且名为 sourcepage 的变量: 
    ' Visual Basic
    ' Put immediately after the Inherits statements
    ' at the top of the file
    Public sourcepage As WebForm1// C#
    // Put immediately after the opening brace of the class
    public class WebForm3 : System.Web.UI.Page
        {
            public WebForm1 sourcepage;
            // etc.
    在 Page_Load 处理程序中,从 Context.Handler 对象(IHttpHandler 接口)中获取源页,然后向其分配在第 1 步创建的变量。必须将该处理程序对象转换为源页类的类型。 
    注意   只应在该页首次运行(即首次从源页中调用该页)时执行此逻辑。
    从源页中获取属性值,并按照使用任何对象属性的方式来使用这些属性值。 
    注意   如果要在除第一页初始化阶段之外的任何页处理阶段中使用属性值,则务必要保存这些属性值(例如以视图状态保存)。有关详细信息,请参见 Web 窗体状态管理介绍。
    完整的 Page_Load 处理程序可能类似于如下所示: 
    ' Visual Basic
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
       If Not Page.IsPostBack Then
          sourcepage = CType(Context.Handler, WebForm1)
          Label1.Text = sourcepage.Property1
       End If
    End Sub// C#
    private void Page_Load(object sender, System.EventArgs e)
    {
       if (!IsPostBack){
          WebForm1 sourcepage = (WebForm1) Context.Handler;
          Label1.Text = sourcepage.Property1;
       }
    }
      

  3.   

    服务端保存状态使用Session,Cache...(后面没有用过不记得啦)
    客户端保存状态采用Cookie, ViewState
      

  4.   


    这个问题在.net2004版本中将全面完整的解决....
      

  5.   

    在ASP.NET中一共有4大类方法可以解决用户登录信息的管理:application,session,cookie,view。我们可以使用HttpApplication类的Application属性来访问Application状态,它返回一个HttpApplicationState类的实例。这个类是一个对象集合,可以存储任何类型的数据,并以键/值对的形式存储。一旦数据被存储到状态后,就不会删除,除非应用程序重新启动或者被终止或回收。我们可以在Global.asax的Application_Start函数中存储数据:
    void Application_Start(object src, EventArgs e)
    {
    int exp = 0;
    // population of dataset from ADO.NET query not shown
    // Cache DataSet reference
    Application["Experiment"] = exp;
    }现在你可以在任意页面下使用它:private void Page_Load(object src, EventArgs e)
    {
      int expr = Int32.Parse((Application["Experiment"]));
    }Session状态是在客户登录的时候创建的,它保存了客户特定的信息,并以Session ID来标识。当一个新客户访问应用程序时,先生成一个新的Session ID(或是Session Key),并为同一个客户接下来的请求创建联系。你可以在Session State中存储任意类型的数据,作为你的应用,状态被同一个进程和AppDomain(App域)维护。Session State的特点是为每一个特定的客户创建状态以维护客户的信息,这些状态信息存储在服务器端的默认的会话状态配置中。但是Session和客户端的Cookie是有关的,当客户关掉Cookie时,Session就失效了。不过在ASP.Net
    中可以在web.config中修改设置,使Session的传递脱离Cookie。方法是:
    <configuration>
      <system.web>    
        <sessionState cookieless="true" />
      </system.web>
    </configuration>每个Cookie存储了多个名/值对,我们可以通过HttpCookie类的值集合来访问它,也可以间接地通过类所提供的索引器访问。Cookie在ASP.Net下的使用:
    protected void Page_Load(Object sender, EventArgs E)
    {
     int expr = 0;
     if (Request.Cookies["Expr"] == null)
     {
      // "Expr" cookie not set, set with this response
      HttpCookie cokExpr = new HttpCookie("Expr");
      cokExpr.Value = exprTextBox.Text;
      Response.Cookies.Add(cokExpr);
      expr = Convert.ToInt32(exprTextBox.Text);
     }
     else
     {
      // use existing cookie value...
      expr = Convert.ToInt32(Request.Cookies["Expr"].Value);
     }
     // use expr to customize page
    }由于Cookie存储的信息是放到客户端的,用户在访问服务器端页面时,必然在客户端和服务器端之间频繁交换信息,影响了程序的性能。而Session由于存储在服务器内存中,因此不存在这个问题。不过,Session存储的信息是临时的,用户一旦关闭浏览器,状态即失去。而Cookie则相反。至于View State,主要是指控件和页面的状态信息,它以_VIEWSTATE值传递给服务器端。
      

  6.   

    但是viewstate 不能跨页面,我想还是用session 或coolie 或application吧
      

  7.   

    目前就用session or cookie or application
      

  8.   

    如何在窗体和窗体之间传送数据  --------------------------------------------------------------------------------
    源作者:追风                   人气:13156  
     
     
    大家都知道aspx在同一个页面中传值是很容易的(如textBox1.Text等)但有时必须向另一个页面传值用以前asp的方法的确觉得不怎么样,还要用Request.Form等东西好象又回到了从前。我这里使用一个类的静态属性作为两个类的外的全局变量实现了两个页面间传值.举一个简单的例子如下:首先定义一个包含静态属性的类:
    using System;namespace study
    {
     /// <summary>
     /// CIndex 的摘要说明。
     /// </summary>
     public class CIndex
     {
      public static string name="";
      public CIndex()
      {  
      }
     }
    }然后在一个包含信息提交的页面中这样写:
    <%@ Page language="c#" Codebehind="submit.aspx.cs" AutoEventWireup="false" Inherits="study.submit" %>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
     <HEAD>
      <title>submit</title>
      <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
      <meta name="CODE_LANGUAGE" Content="C#">
      <meta name="vs_defaultClientScript" content="JavaScript">
      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
     </HEAD>
     <body MS_POSITIONING="GridLayout">
      <form runat="server" ID="Form1">
       <asp:TextBox id="textBox1" runat="server" />
       <asp:Button text="提交" runat="server" ID="Button1" />
      </form>
     </body>
    </HTML>Codebehind:
    首先引入study命名空间
    using study;
    再加入Button1的Click事件
    private void Button1_Click(object sender, System.EventArgs e)
    {
     CIndex.name=textBox1.Text;//将要传到另一页的值赋给类的静态属性
     Response.Redirect("getsubmit.aspx");
    }然后在另一个页面里面的codebehind里加入下面代码:
    private void Page_Load(object sender, System.EventArgs e)
    {
     Response.Write("你输入的参数值是: "+CIndex.name);
    }这样就完成了.简单吧.
     
     
    转自 chinabs
      

  9.   

    session最好
    但可惜的是耗资源厉害
    所以要设计合理,不能什么东西都往session里面扔
      

  10.   

    还有就是用Cache,在内存缓存中传递
      

  11.   

    如果用数据库怎样实现?我想总有一个查寻用的当前用户ID吧,那这个当前用户ID存在哪里?