跨页传递参数或临时表的几种方法
一、页面之间参数传递
关于在页面之间传递参数的方法有很多,可以根据编程习惯或安全的需要使用不同的方法。
1.直接在转向页面的后面加传递参数:
需转到上一级目录如:Response.Redirect("../AddFolder/AddProd.aspx"+"?ID=2&&ClassName=水果");
在当前目录如:Response.Redirect("AddProd.aspx"+"?ID=2&&ClassName=水果");
获取方式:string id=Request["ID"];
2.通过Session传递参数:
例:Session["Prod"]="水果";
获取方式:string prodStr=Session["Prod"];
3.通过Cookie传递参数:
例:HttpCookie prodCookie=new HttpCookie("Prod");
prodCookie.Value["prodID"]="2";//如果是Values就可以用于多个参数
Response.Cookies.Add(prodCookie);
4.通过Application传递参数:
例:Application["Prod"]="水果";
获取方式:string prodStr=Application["Prod"];
5.通过Cache传递参数(VB.Net),此方法可用于单点登录:
例:Dim sKey As String="admin"
Dim sUser As String = Convert.ToString(Cache(sKey))
Dim de As System.Web.Caching.CacheDependency
Dim re As System.Web.Caching.CacheItemRemovedCallback
Dim SessTimeOut As TimeSpan = New TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0)
HttpContext.Current.Cache.Insert(sKey, sKey, de, DateTime.MaxValue, SessTimeOut, System.Web.Caching.CacheItemPriority.NotRemovable, re)
二、传递临时表,比如购物车
这样的方法应该也有很多,主要有存到数据库的表中、文本文件或其他文件中、存到DataTable/Hashtable中等等。这里主要介绍DataTable/Hashtable存临时表的方法。
1.Hashtable存临时表,适合于表中的数据具有唯一性。
例:Hashtable prodHT=(Hashtable)Session["selProd"];//建立Hashtable
//((CheckBox)(item.FindControl("selCB")))说明:DataGrid中的CheckBox控件
if (!(prodHT.ContainsKey(((CheckBox)(item.FindControl("selCB"))).Text.Trim())) )
prodHT.Add(((CheckBox)(item.FindControl("selCB"))).Text.Trim(),1);//不存在建立Hashtable键
else
prodHT[e.Item.Cells[1].Text.Trim()]=(int)prodHT[e.Item.Cells[1].Text.Trim()]+1;//多次点击时,数量值加1
string selProd = "('";//将Hashtable表中的键组成字符串
foreach (string tempStr in prodHT.Keys )
for (int i=0;i<(int)prodHT[tempStr];i++)
selProd+=tempStr + "','";
selProd =selProd+ "')";
cmd=new SqlCommand("select *from ProdTB where ProdAlias in "+selProd,conn);
selectDg.DataSource=cmd.ExecuteReader();
selectDg.DataBind();//将数据绑定到DataGrid
Session["selProd"]=prodHT;//将Hashtable中数据存到Session
2.DataTable存临时表,可以在表中插入重复数据。
获取表结构,可以通过现在数据库中的表结构,也可以自己建立临时表结构。
例:SqlDataAdapter da=new SqlDataAdapter("select ID,ProdAlias,ProdName,ProdScope ProdTB where ID=0",conn);
DataSet ds=new DataSet();
da.Fill(ds, "First");
DataTable prodDT=ds.Tables["First"];//获取表结构
//插入数据
prodDT.Columns[0].AutoIncrementSeed=1;//ID自动增加初始值
prodDT.Columns[0].AutoIncrement=true;//确定ID为自动增加列
DataRow dr=prodDT.NewRow();
dr["ProdAlias"]=((CheckBox)(item.FindControl("selCB"))).Text.Trim();
dr["ProdName"]=item.Cells[1].Text.Trim();
dr["ProdScope"]=item.Cells[2].Text.Trim();
prodDT.Rows.Add(dr);
//插入完数据后绑定到DataGrid
selectDg.DataSource=prodDT;
selectDg.DataBind();
Session["selProd"]=prodDT;//将DataTable中数据存到Session
有什么不妥之处,请大家指正。如有更好的方法,请帮我补充完整。