学习Asp.net一直有个疑问,页面每次请求都是新生成的,我知道Asp.net服务器控件可以利用viewstate自动保存控件的信息,但是自己定义的对象呢。
比如我有一个customer.aspx的叶面用来维护customer信息,在这个叶面有我自己定义的Customer类的对象myCustomer,每次访问页面的时候如何保存myCustomer对象的状态呢,难道每次都要新建这个对象(感觉很麻烦);还是用Session["MyCustomer"] = myCustomer(好像也有问题,如果一个用户访问了两个不同的customer,是不是会把其中的一个冲掉呢)。从C/S转到B/S一直有点晕

解决方案 »

  1.   

    ViewState["myCustomer"] = myCustomer ;  //保存myCustomer = (Customer)ViewState["myCustomer"] ;  //读取
      

  2.   

    viewstate并不是保存对象的状态,而只是SERVER控件的状态,页面和类虽然在第一次访问时被编译过,但是UNLOAD后,所有页面级别的类都是被销毁的,重新访问或回送的时候又会重新生成一个新的实例。
    你的Customer类的myCustomer实例在回送后是不会保存状态的,只有通过在新生成的实例中设置前一个回送的状态,通常B/S中都是使用SESSION或APPLICATIN或viewstate保存的信息来重新设置新的这个实例。
      

  3.   

    昏,楼上的想说什么.我用viewstate保存对象状态怎么不对了。请解释。
      

  4.   

    同意一楼的观点.建议你去看看aspx的页面执行模型,和控件的生存周期,这跟C/S是很不一样的..一般服务器控件要维护自己的状态的话都是用viewstate来保存的.例如:
    public string Name
    {
        get
        {
            return (string)ViewState["Name"];
        }
        set
        {
            ViewState["Name"] = value;
        }
    }
      

  5.   

    记住,不是用类的字段来保存数据了,而是用ViewState!!
    MSDN里面有aspx的页面执行模型,和控件的生存周期,想要学好aspx,最好要看看这个..
      

  6.   

    ViewState:
    http://www.microsoft.com/china/msdn/archives/library/dnaspnet/html/Asp11222001.asp
    Session:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ASPNetSessionState.asp关注作家Dino Esposito    我的体会:Web无状态,所有东西都是通过消息发送人发送的信息重新组装:),就是说Server发一个页面到Client,Server不再保持任何发过页面的信息(除非你用Session),当Client端PostBack时,Server根据原有页面代码和Client端的回传信息重新组装出页面供处理使用,处理结果再发给Client。
        注意ViewState, Session, private variable, Page_Load(), if (! IsPostBack)的使用.
        适当使用ascx.
        还没来得及找本asp.net的书好好看看。
      

  7.   

    web本来就是无状态的,我想你要做的并不是找到变通的方法去保存一些状态(session,viewstate), 而是设计的时候考虑到无状态的本质