Server.Transfer中传递ViewState方法

    当我们使用Server.Transfer时,可以将先前页面中的Request参数一起传到下一页面。但如何将ViewState一起传过去呢?
    主要方法是先将ViewState缓存起来,然后在通过缓存获取。缓存可以是Session等。
    网上有人写了方法,主要是先将ViewState用方法返回。然后在调用页面中通过反身获取。与缓存原理类似。

例子如下:

    Default.aspx页面

    增加一个ViewState,并添加返回ViewSate的ReturnViewState()方法,最后使用Server.Transfer跳转,代码如下:

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ViewState["vId"] = "test";
                Server.Transfer("Tra.aspx");
            }
        }

        /// <summary>
        
/// 用此方法返回当前页面的ViewState
        
/// </summary>
        
/// <returns></returns>
        public StateBag ReturnViewState()
        {
            return ViewState;
        }
    }
 

    Tra.aspx页面:

    在此页面通过反段得到先前页面的ViewState。

        protected void Page_Load(object sender, EventArgs e)
        {
            InitialData();           
        }

        /// <summary>
        
/// 通过反射得到ViewState,并显示
        
/// </summary>
        private void InitialData()
        {
            if (null != PreviousPage)
            {
                Object objPreviousPage = (Object)PreviousPage;
                MethodInfo objMethod = objPreviousPage.GetType().GetMethod("ReturnViewState");
                if (objMethod != null)
                {
                    StateBag viewStageBage = (StateBag)objMethod.Invoke(objPreviousPage, null);
                    if (viewStageBage != null)
                    {
                        if (null != viewStageBage["vId"])
                        {
                            Response.Write("vId:" + viewStageBage["vId"].ToString() + "<br/>");
                        }
                    }
                }
            }           
        }
原文地址:https://www.cnblogs.com/scottckt/p/2277903.html