SMSPortal.Model.UserRight model = new SMSPortal.Model.UserRight();
            model.FunId = "1";
            ViewState.Add("Add1",model);
            model.FunId = "2";
            ViewState.Add("Add2",model);
            model.FunId = "3";
            ViewState.Add("Add3",model);
如上代码 在页面的ViewState中存储了三个实体 只有实体的FunId 不同
但是再从ViewState中取出实体时,前面两个实体全部被最后一个覆盖了,三个实体的FunId全部变为3了...
foreach (string sKey in this.ViewState.Keys)
            {
                object obj = ViewState[sKey];
                if (obj.GetType() == typeof(SMSPortal.Model.UserRight))
                {
                  //三个实体的FunId全部变为3了...
                }
            }
也就是ViewState中会自动更新同类型的实体.这是为什么呢?我如何取出之前保存的三个实体呢?

解决方案 »

  1.   

    ViewState在server端存储的也是引用。所以需要new 3个对象才可以。            SMSPortal.Model.UserRight model1 = new SMSPortal.Model.UserRight();
                model1.FunId = "1";
                ViewState.Add("Add1",model1);
                SMSPortal.Model.UserRight model2 = new SMSPortal.Model.UserRight();
                model2.FunId = "2";
                ViewState.Add("Add2",model2);
                SMSPortal.Model.UserRight model3 = new SMSPortal.Model.UserRight();
                model3.FunId = "3";
                ViewState.Add("Add3",model3);
      

  2.   

    1楼正解,也可以这么写。
    SMSPortal.Model.UserRight model = new SMSPortal.Model.UserRight();
                model.FunId = "1";
                ViewState.Add("Add1",model);
    model = new SMSPortal.Model.UserRight();
                model.FunId = "2";
                ViewState.Add("Add2",model);
    model = new SMSPortal.Model.UserRight();
                model.FunId = "3";
                ViewState.Add("Add3",model);
      

  3.   

    直接
    ViewState("Add1") = 1
    ViewState("Add2") = 2
    不就可以了吗?