一.使用Application 对象变量
Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock,此种方法不常使用,因为Application在一个应用程序域范围共享,所有用户可以改变及设置其值,故只应用计数器等需要全局变量的地方.
设置Application : Application["name"] = ="hello";
获取Application : string name = Application["name"].ToString();
private void Button1_Click(object sender, System.EventArgs e)
{
Application["name"] = Label1.Text;
Server.Transfer("b.aspx");
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
string name;
Application.Lock();
name = Application["name"].ToString();
Application.UnLock();
二. PostBackUrl()方法
default.aspx页面:
Code
1 <asp:Button ID="Button1" Runat="server" Text="PostToAnotherPage" PostBackUrl="~/Default2.aspx" />
2
default2.aspx页面:
Code
1 if (PreviousPage != null)
2 {
3 TextBox textBox1 = (TextBox)PreviousPage.FindControl("TextBox1");
4 Response.write(textBox1.Text );
5 }
三. 使用QueryString变量
QueryString是一种非常简单也是使用比较多的一种传值方式,但是它将传递的值显示在浏览器的地址栏中,如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。
Response.Redirect( "target.aspx?param1=hello¶m2=hi ")
接收页面: string str = Request.QueryString["param1"];
string str1 = Request.QueryString["param2];
四..使用Cookie对象变量(Cookie是存放在客户端的)
设置Cookie: HttpCookie cookie_name = new HttpCookie("name");
cookie_name.Value = Label1.Text;
Reponse.AppendCookie(cookie_name);
获取Cookie:
string name= Request.Cookie["name"].Value.ToString();
五. 使用Session变量(session是存放在服务器端的)
设置Session: Session["name"] ="hello";
获取Session: string name = Session["name"].ToString();
其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。
六.Response.Redirect()方式
发送页面:Response.Redirect("target.aspx?param1=1111¶m2=2222");
接收页面:string str = Request["param1"];
七.使用Server.Transfer方法
这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。
a.aspx的C#代码
public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
a newWeb; //实例a窗体
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}
八. 如果在两个页面间需要大量的参数要传传递,如数据查询等页面时,或者又要从结果页面返回前一页面的数据回来;上述几种方式均有瑕疵.
A) StartPage.aspx
页面有4个TextBox控件,分别为Project,UserName,RMano#,OrderNo#,一个Redirect Button, Cancel button
Codes as following:
-----------------------------------------------------------------------------------------------------------------------------------
引入相应的命名空间:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
-----------此处页面要继承一个Interface named IQueryParams
public partial class test1_StartPage : System.Web.UI.Page,ClsLibrary1.IQueryParams //Herits Interface,稍后解释
{
protected void Page_Load(object sender, EventArgs e)
{
//-------因为要从DesPage.aspx返回该页面传去的数据---------
if (!IsPostBack)
{
txtProj.Focus();
txtProj.Attributes.Add("onfocus", "this.select();");
ClsLibrary1.QueryClassParams qParams = new ClsLibrary1.QueryClassParams();
ClsLibrary1.IQueryParams queryInferface;
//the page which implement this interface
if (Context.Handler is ClsLibrary1.IQueryParams) ///转换一下即可获得前一页面中输入的数据
{
queryInferface = (ClsLibrary1.IQueryParams)Context.Handler;
qParams = queryInferface.Parameters;
//Set relevant value to related Control
setRelevantControl(ref qParams);
}
}
}
//声明类变量
private ClsLibrary1.QueryClassParams queryParams;
public ClsLibrary1.QueryClassParams Parameters
{
get
{
return queryParams;
}
}
protected void btnREDRECT_Click(object sender, EventArgs e)
{
// ----------------------------------------
//set value and initialization
queryParams=new ClsLibrary1.QueryClassParams();
queryParams.Project=txtProj.Text;
queryParams.UserName=txtUName.Text;
queryParams.RMANO=txtRMANO.Text;
queryParams.ORDERNO=txtORDERNO.Text;
//Direct DesPage
Server.Transfer("DesPage.aspx",true);
}
private void setRelevantControl(ref ClsLibrary1.QueryClassParams parQueryParams)
{
//在从DesPage返回相应的Data,要判断cls是否为空引用
if (!(parQueryParams == null))
{
txtProj.Text = parQueryParams.Project;
txtUName.Text = parQueryParams.UserName;
txtRMANO.Text = parQueryParams.RMANO;
txtORDERNO.Text = parQueryParams.ORDERNO;
}
}
protected void btnCAL_Click(object sender, EventArgs e)
{
txtProj.Text = string.Empty;
txtUName.Text = string.Empty;
txtRMANO.Text = string.Empty;
txtORDERNO.Text = string.Empty;
txtProj.Focus();
}
}
在这种方式中关键在于"queryInferface = (ClsLibrary1.IQueryParams)Context.Handler; ”的转换,只有转换不依赖于特定的页面时即可实现。如果让所有的查询页面都继承一个接口,在该接口中定义一个方法,该方法的唯一作用就是让结果页面获得构建结果时所需的参数,就可实现多页面共享一个结果页面操作!
1、先定义一个类,用该类放置所有查询参数:
namespace ClsLibrary1
{
public class QueryClassParams
{
private string propject;
private string userName;
private string rmano;
private string orderno;
/// <summary>
/// Project property
/// </summary>
public string Project
{
get { return this.propject; }
set { propject = value; }
}
/// <summary>
/// User Name property
/// </summary>
public string UserName
{
get { return this.userName; }
set { this.userName = value; }
}
/// <summary>
/// RMANO property
/// </summary>
public string RMANO
{
get { return this.rmano; }
set { this.rmano = value; }
}
/// <summary>
/// ORDERNO property
/// </summary>
public string ORDERNO
{
get { return this.orderno; }
set { this.orderno = value; }
}
}
2. 定义接口
public interface IQueryParams
{
//-----参数----
QueryClassParams Parameters
{
get;
}
}
}
3、起始页面StartPage继承IQueryParams接口:
public partial class test1_StartPage : System.Web.UI.Page,ClsLibrary1.IQueryParams
{
//----Nothing
}
4. DesPage页面设置:
public partial class test1_DesPage : System.Web.UI.Page,ClsLibrary1.IQueryParams //因为要将此页的数据回传给StartPage
{
protected void Page_Load(object sender, EventArgs e)
{
//--------------------------------------------
// 防止点击DesPage页面上的Return Button后该页面回发server
if (!IsPostBack)
{
DataSet ds = null;
ClsLibrary1.QueryClassParams queryParams = new ClsLibrary1.QueryClassParams();
ClsLibrary1.IQueryParams queryInferface;
//the page which implement this interface
if (Context.Handler is ClsLibrary1.IQueryParams)
{
queryInferface = (ClsLibrary1.IQueryParams)Context.Handler;
queryParams = queryInferface.Parameters;
ds = MakeDataTable(ref queryParams);
gvDataResult.DataSource = ds;
gvDataResult.DataBind();
}
/* Response.Write("Project: ");
Response.Write(queryParams.Project);
Response.Write("<br/>UserName: ");
Response.Write(queryParams.RMANO);
Response.Write("</br>OrderNo: ");
Response.Write(queryParams.ORDERNO);*/
}
}
/// <summary>
/// Create GridView's DataSource for Showing
/// <paramref name="QueryParams"/>
/// </summary>
/// <param name="pQueryParams"></param>
private DataSet MakeDataTable(ref ClsLibrary1.QueryClassParams pQueryParams)
{
//Create a new DataTable
DataTable Table = new System.Data.DataTable("PTable");
DataColumn column;
DataRow row;
DataSet ds;
//Create new DataColumn,set DataType.
//ColumnName and Add to DataTable
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "Project";
column.ReadOnly = true;
column.Unique = true;
//Add the column to the DataColumnCollection
Table.Columns.Add(column);
//Create second column
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "User Name";
column.AutoIncrement = false;
column.Caption = "User Name";
column.ReadOnly = false;
column.Unique = false;
Table.Columns.Add(column);
//Create third column
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "RMANO";
column.ReadOnly = false;
column.Unique = false;
Table.Columns.Add(column);
//Create forth column
column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = "OrderNo";
column.ReadOnly = false;
column.Unique = false;
Table.Columns.Add(column);
//Create one new DataRow object and add this to the DataTable
row = Table.NewRow();
row["Project"] = pQueryParams.Project;
row["User Name"] = pQueryParams.UserName;
row["RMANO"] = pQueryParams.RMANO;
row["OrderNo"] = pQueryParams.ORDERNO;
Table.Rows.Add(row);
ds = new DataSet();
ds.Tables.Add(Table);
return ds;
}
private ClsLibrary1.QueryClassParams queryParams;
public ClsLibrary1.QueryClassParams Parameters
{
get
{
return queryParams;
}
}
protected void btnBACK_Click(object sender, EventArgs e)
{
//set value
queryParams = new ClsLibrary1.QueryClassParams();
queryParams.Project = gvDataResult.Rows[0].Cells[0].Text.ToString();
queryParams.UserName = gvDataResult.Rows[0].Cells[1].Text.ToString();
queryParams.RMANO = gvDataResult.Rows[0].Cells[2].Text.ToString();
queryParams.ORDERNO = gvDataResult.Rows[0].Cells[3].Text.ToString();
//--设置好回传给StartPage页面的参数后,Direct to StartPage,其页面设置参照以上StartPage☞设置:
Server.Transfer("StartPage.aspx", true);
}
}
另:页面StartPage上对4个Textbox空判断是用Js前台处理;
function CheckTextControl() {
var txtProj = null;
var txtUName = null;
var txtRmano = null;
var txtOrderNo = null;
/*Check Proj*/
txtProj = window.document.getElementById("txtProj");
/*Check Customer name*/
txtUName = window.document.getElementById("txtUName");
/*Check RMano*/
txtRmano = window.document.getElementById("txtRMANO");
/*Check OrderNo*/
txtOrderNo = window.document.getElementById("txtORDERNO");
if (txtProj.value == "") {
txtProj.focus();
alert('Please Input Project');
return false;
}
if (txtUName.value == "") {
txtUName.focus();
alert('Please Input User Name');
return false;
}
if (txtRmano.value == "") {
txtRmano.focus();
alert('Please Input RMANO#');
return false;
}
if (txtOrderNo.value == "") {
txtOrderNo.focus();
alert('Please Input OrderNo#');
return false;
}
}
再在Redirect Button 的 OnClientClick事件上加上客户端脚本function:
<asp:Button ID="btnREDRECT" runat="server" BorderColor="#66CCFF" OnClick="btnREDRECT_Click"
Text="Redirect" OnClientClick="if (CheckTextControl()==false) return false;" />