网上有个一BBS文章管理,BbsListControl用户自定义控件,里面包含有以下定义:
 public const string ArgumentString = "BbsListControl_New.ArgumentString";
 BbsListControlArgs_New arguments
 {
  get
     {
     if(Session[ArgumentString]==null)
     {
       Session[ArgumentString] = new BbsListControlArgs_New();
      }
     return (BbsListControlArgs_New)Session[ArgumentString];
     }
 set
    {
     Session[ArgumentString]=value;
    }
}public class BbsListControlArgs
{
public string ID="7ec7b6da-ff00-45a7-acc8-1e4aab9a7ad2";
public bool DishplayMoreButton=true;
public bool AllowPaging=true;
public int PageSize=10;
public bool ShowContent=true;
public bool AllowAddNew=true;
public bool HasBorder=false;
public bool IsChildList=false;
public bool ShowBullet=true;
public bool ShowPageNavigator=false;
public bool ShowDate=false;
public bool ShowEditButtons = false;
public bool ShowOnlyRectanly = false;
}
这两个主要通过Session保存进入BBS一些属性设置,然后设置DataGrid属性和查询数据库(代码没写出)比如公告信息模块,只需要这样用就OK,其他模块也一样。
ETAX.Web.Bbs.BbsListControlArgs args = new ETAX.Web.Bbs.BbsListControlArgs();
args.AllowAddNew = false;
args.AllowPaging = true;
args.PageSize = 5;
args.DishplayMoreButton = true;
args.HasBorder = false;
args.GroupID = ItemGuid.公告信息;
args.ShowOnlyRectanly = true;
args.IsChildList = false;
args.ShowContent = false;
args.ShowDate = false;
args.ShowEditButtons = false;
args.ShowBullet = false;
Session[ETAX.Web.Bbs.BbsListControl.ArgumentString] = args;
我想问的是,如果不用Session来保存,还有什么办法更好??

解决方案 »

  1.   

    Application:保存所有用户共用的数据信息。Session :用于保存每个用户的专用信息,生存期是用户持续请求时间再加上一段时间。用session来保存用户数据的方法效率很低Cookie :用于保存客户浏览器请求服务器页面的请求信息,也可以用来放非敏感性的用户信息,信息保存的时间可以根据需要设置ViewState:保存单个用户状态信息,有效期等于页面的生存期。可以保持大量数据,但是使用要谨慎,过多使用会影响应用程序的性能Cache:用于http请求间保存页面或数据。可以极大的提高整个应用程序的效率。隐藏域
      

  2.   

    还有一个就是查询字符串,就是在url的后面,如:
    aa.aspx?text=aaa
      

  3.   

    隐藏域和url后加字符串,好像都只能传递字符串
    你要传一个庞大的对象,用session是个不错的选择了
      

  4.   

    可不可以不用Application、Session、Cookie、ViewState、Cache这些,另外想更好的办法?
      

  5.   

    其实用传递表单参数的方法,传递其它对象也是应该可以的,给你个表单不用Session传递参数的方法,你可以修改一下试试.
    //////////////////////////////////////////////
    firstpage.aspx
    //////////////////////////////////////////////
    <%@ Page Language="C#" Inherits="FirstPageClass" %><html>
    <head></head><body>   <form runat="server">
          First Name: 
          <asp:TextBox id="first" 
               runat="server"/> 
          <br/>
          Last Name: 
          <asp:TextBox id="last" 
               runat="server"/>
          <br/>
          <asp:Button
               id="Button1" 
               OnClick="ButtonClicked" 
               Text="Go to second page"
               runat=server />
       </form></body></html>
    //////////////////////////////////////////////////
    firstpage.aspx.cs
    //////////////////////////////////////////////
    using System;public class FirstPageClass : System.Web.UI.Page
    {
       protected System.Web.UI.WebControls.TextBox first;
       protected System.Web.UI.WebControls.TextBox last;
       protected System.Web.UI.WebControls.Button Button1;   public string FirstName 
       { 
          get 
          { 
             return first.Text; 
          } 
       }   public string LastName 
       { 
          get 
          { 
             return last.Text; 
          } 
       }   void ButtonClicked(object sender, EventArgs e) 
       { 
          Server.Transfer("secondpage.aspx"); 
       }
    }//////////////////////////////////////////////////
    secondpage.aspx
    //////////////////////////////////////////////////
    <%@ Page Language="C#" Inherits="SecondPageClass" %>
    <%@ Reference Page="firstpage.aspx" %><html><head></head> <body>   <form runat="server">      Hello <%=fp.FirstName%> <%=fp.LastName%>   </form></body></html>
    //////////////////////////////////////////////////
    secondpage.aspx.cs
    //////////////////////////////////////////////////
    using System;public class SecondPageClass : System.Web.UI.Page
    {   protected System.Web.UI.WebControls.Label DisplayLabel;
       public FirstPageClass fp;   void Page_Load() 
       {
          if (!IsPostBack)
          {
             fp = (FirstPageClass) Context.Handler;
          } 
       }}
    应该充分利用C#的特点,写出来的才算真正的.net
      

  6.   

    不行,我原来在GongGaoXinXiControl.ascx(公告信息版)放一个BbsListControl.ascx,然后把这个公告信息版用户控件在放到首页。
    程序执行顺序应该是执行首页PageLoad(),然后执行公告信息版用户控件的代码,即那些设置属性,然后在执行BbsListControl.ascx,原来用Session保存,但发现执行的时候用户多的,会有点慢。ViewState只能够保存本页的东西,跨页不行。
    至于Cache,服务器是否为每个用户分配一空间???如果同一空间可能会用户数据有冲突??
    我的网站有三层开发,并没有使用存储过程。