原本可以通过URL传递参数,可是当参数很多很长时,这么做好象不太合适,有没有其他的传递方式?

解决方案 »

  1.   

    http://expert.csdn.net/Expert/topic/2751/2751639.xml?temp=.2194635
      

  2.   

    Passing Values between ASP.NET Web Forms
    http://www.dotnetbips.com/displayarticle.aspx?id=79also see
    Nine Options for Managing Persistent User State in Your ASP.NET Application
    http://msdn.microsoft.com/msdnmag/issues/03/04/ASPNETUserState/default.aspx
      

  3.   

    一、使用Querystring
    Querystring是一种非常简单的传值方式,其缺点就是会把要传送的值显示在浏览器的地址栏中,并且在此方法中不能够传递对象。如果你想传递一个安全性不是那么太重要或者是一个简单的数值时,用此方法最好不过了。下面通过一个小例子来完成传值工作,步骤如下:
    1、创建一个web form
    2、在新建的web form中放置一个button1,在放置两个TextBox1,TextBox2 
    3、为button按钮创建click事件
    代码如下:
    private void Button1_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 Button1_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 Button1_Click
    (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)
    {
     //创建原始窗体的实例
     WebForm1 wf1;
     //获得实例化的句柄
     wf1=(WebForm1)Context.Handler;
     Label1.Text=wf1.Name;
     Label2.Text=wf1.EMail;}
    运行,即可看到传递后的结果了。
      

  4.   

    使用QueryString
    使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下:
    1,使用控件创建web表单(form)
    2,创建可以返回表单的按钮和链接按钮
    3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量
    4,在保存的URL里添加QueryString参数
    5,使用Response.Redirect重定向到上面保存的URL
    下面的代码片断演示了如何实现这个方法:
      源页面代码:
    private void Button1_Click
    (object sender, System.EventArgs e)
    {
     string url;
     url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;
     Response.Redirect(url);
    }
     目标页面代码:
     private void Page_Load
    (object sender, System.EventArgs e)
    {
     Label1.Text=Request.QueryString["name"];
     Label2.Text=Request.QueryString["email"];
    }使用Session变量
      使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下:
    1,在页面里添加必要的控件
    2,创建可以返回表单的按钮和链接按钮
    3,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里
    4,使用Response.Redirect方法重定向到另一个页面
    5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它
    下面的代码片断演示了如何实现这个方法:
       源页面代码:
    private void Button1_Click
    (object sender, System.EventArgs e)
    {
     //textbox1 and textbox2 are webform
     //controls
     Session["name"]=TextBox1.Text;
     Session["email"]=TextBox2.Text;
     Server.Transfer("anotherwebform.aspx");
    }
      目标页面代码:
    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,在页面里添加必要的控件
    2,创建返回值的Get属性过程
    3,创建可以返回表单的按钮和链接按钮
    4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面
    5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了
    以下代码综合实现上述步骤过程的代码:
      源页面代码:
        把以下的代码添加到页面中
       public string Name
    {
     get
     {
     return TextBox1.Text;
     }
    }public string EMail
    {
     get
     {
     return TextBox2.Text;
     }
    }
      然后调用Server.Transfer方法
    private void Button1_Click
    (object sender, System.EventArgs e)
    {
     Server.Transfer("anotherwebform.aspx");
    }
       目标页面代码:
    private void Page_Load
    (object sender, System.EventArgs e)
    {
     //create instance of source web form
     WebForm1 wf1;
     //get reference to current handler instance
     wf1=(WebForm1)Context.Handler;
     Label1.Text=wf1.Name;
     Label2.Text=wf1.EMail;
    }总结
      本文讲述了使用不同的方法实现了ASP.NET页面间值传递,这三种方法是:QueryString,Session和Server.Transfer,我们应该反覆体会几种方法的异同
      

  5.   

    session虽然也能用于传参但是不建议使用Session来做这些事情,这样会给服务器和网络造成很大的负担,系统性能影响明显。如果参数很长,建议使用input hidden元素传参,当然这样要将from 的 action指向你要传递的页面,并且method为post。(记住传参之前要对其编码)这样能够有效地解决参数过长的问题。如果这样还不能满足你的要求建议考虑其他方法,如将数据先存入数据库,只传递该条记录的ID值。
      

  6.   

    ASP.NET中没有Request.Form()这种FORM传值方法吗?
      

  7.   

    Request.Form()是可以的,但你要获知<FORM ACTION="NEXT.ASPX"></FORM>控件ID号.
    一般WEB CONTROL传给客户端的也是普通的HTML
    ASPX提供的是POSTBACK机制,最好表单在本页处理,也是很方便的.传值有三种方法如上所说了. 其实还有CACHE的方法的.
      

  8.   

    服务器端 页面间传参数 可以使用 System.Web.HttpContext.Current.Items 集合