zoukankan      html  css  js  c++  java
  • ASP.NET页面间传值

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

    1、表单提交,
       <form action= "target.aspx" method = "post" name = "form1">
     <input name = "param1" value = "1111"/>
     <input name = "param2" value = "2222"/>
       </form>
       ....
       form1.submit();
       ....
       此种方在ASP。NET中无效,因为ASP。NET的表单总是提交到自身页面,如果要提交到别一页面,需要特殊处理。
    2、<A href="target.aspx?param1=1111&param2=2222">链接地址传送</A>
    接收页面: string str = Request["param1"]
    3、Session共享
    发送页面:Session("param1") = "1111"; 
    按收页面  string str = Session("param1").ToString(); 
    4、Application共享
    发送页面: Application("param1") = "1111";  
    按收页面: string str = Application("param1").ToString(); 
    此种方法不常使用,因为Application在一个应用程序域范围共享,所有用户可以改变及设置其值,故只应用计数器等需要全局变量的地方。
    5、Cookie
    6、Response.Redirect()方式
       Response.Redirect("target.aspx?param1=1111&param2=2222")
       接收页面: string str = Request["param1"]
    7、Server.Transfer()方式。
       Server.Transfer("target.aspx?param1=1111&param2=2222")
       接收页面: string str = Request["param1"]

    二、如果在两个页面间需要大量的参数要传传递,如数据查询等页面时,用1 - 6的方法传值及其不便,而第 7 种方法确有一独特的优势!但使用该方法时需要一定的设置,现简单介绍一下该方法的使用方式:

      以查询数据页面为例:

       在查询页面中设置如下公有属性(QueryPage.aspx):

        public class QueryPage : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.TextBox txtStaDate;
    protected System.Web.UI.WebControls.TextBox txtEndDate;
       ...
    /// <summary>
    /// 开始时间
    /// </summary>
    public string StaDate
    {
    get{ return this.txtStaDate.Text;}
    set{this.txtStaDate.Text = value;}
    }
    /// <summary>
    /// 结束时间
    /// </summary>
    public string EndDate
    {
    get{ return this.txtEndDate.Text;}
    set{this.txtEndDate.Text = value;}
    }
    ....
    private void btnEnter_Click(object sender, System.EventArgs e)
    {
    Server.Transfer("ResultPage.aspx");
    }
    }

       在显示查询结果页面(ResultPage.aspx):

        public class ResultPage : System.Web.UI.Page
    {
       private void Page_Load(object sender, System.EventArgs e)
       {
    //转换一下即可获得前一页面中输入的数据
    QueryPage queryPage = ( QueryPage )Context.Handler;
    Response.Write( "StaDate:" );
    Response.Write( queryPage.StaDate );
    Response.Write( "<br/>EndDate:" );
    Response.Write( queryPage.EndDate );
      }
    }

    三、如果有许多查询页面共用一个结果页面的设置方法:

        在这种方式中关键在于“ QueryPage queryPage = ( QueryPage )Context.Handler; ”的转换,只有转换不依赖于特定的页面时即可实现。

    如果让所有的查询页面都继承一个接口,在该接口中定义一个方法,该方法的唯一作用就是让结果页面获得构建结果时所需的参数,就可实现多页面共享一个结果页面操作!

    1、先定义一个类,用该类放置所有查询参数:

    /// <summary>
    /// 结果页面中要用到的值
    /// </summary>
    public class QueryParams
    {
    private string staDate;
    private string endDate;
    /// <summary>
    /// 开始时间
    /// </summary>
    public string StaDate
    {
    get{ return this.staDate;}
    set{this.staDate = value;}
    }
    /// <summary>
    /// 结束时间
    /// </summary>
    public string EndDate
    {
    get{ return this.endDate;}
    set{this.endDate = value;}
    }
    }

    2、接口定义:

    /// <summary>
    /// 定义查询接口。
    /// </summary>
    public interface IQueryParams
    {
    /// <summary>
    /// 参数
    /// </summary>
    QueryParams Parameters{get;}
    }

    3、查询页面继承IQueryParams接口(QueryPage.aspx):

    /// <summary>
    ///查询页面,继承接口
    /// </summary>
    public class QueryPage : System.Web.UI.Page, IQueryParams
    {
    protected System.Web.UI.WebControls.TextBox txtStaDate;
    protected System.Web.UI.WebControls.TextBox txtEndDate;
    private QueryParams queryParams;
       ...
    /// <summary>
    /// 结果页面用到的参数
    /// </summary>
       public QueryParams Parameters
    {
    get
    {
    return queryParams;
    }
    }
    ....
    private void btnEnter_Click(object sender, System.EventArgs e)
    {
    //赋值
    queryParams = new QueryParams();
    queryParams.StaDate = this.txtStaDate.Text;
    queryParams.EndDate = this.txtEndDate.Text
    Server.Transfer("ResultPage.aspx");
    }
    }

    4、别外的页面也如此设置

    5、接收页面(ResultPage.aspx):

    public class ResultPage : System.Web.UI.Page
    {
       private void Page_Load(object sender, System.EventArgs e)
       {
    QueryParams queryParams = new QueryParams();
    IQueryParams queryInterface;
    //实现该接口的页面
    if( Context.Handler is IQueryParams)
    {
    queryInterface = ( IQueryParams )Context.Handler;
    queryParams = queryInterface.Parameters;
    }
    Response.Write( "StaDate:" );
    Response.Write( queryParams.StaDate );
    Response.Write( "<br/>EndDate:" );
    Response.Write( queryParams.EndDate );
      }
    }

  • 相关阅读:
    windows中dos命令指南
    HDU 2084 数塔 (dp)
    HDU 1176 免费馅饼 (dp)
    HDU 1004 Let the Balloon Rise (map)
    变态杀人狂 (数学)
    HDU 2717 Catch That Cow (深搜)
    HDU 1234 开门人和关门人 (模拟)
    HDU 1070 Milk (模拟)
    HDU 1175 连连看 (深搜+剪枝)
    HDU 1159 Common Subsequence (dp)
  • 原文地址:https://www.cnblogs.com/myssh/p/1468027.html
Copyright © 2011-2022 走看看