跨页传递参数或临时表的几种方法

跨页传递参数或临时表的几种方法
一、页面之间参数传递
         关于在页面之间传递参数的方法有很多,可以根据编程习惯或安全的需要使用不同的方法。
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

  有什么不妥之处,请大家指正。如有更好的方法,请帮我补充完整。

 

posted @ 2008-05-16 08:34  追逐苦痛  阅读(555)  评论(0编辑  收藏  举报