如何使用HttpContext访问当前页面的ViewState?

时间:2011-06-10 16:07:19

标签: viewstate httpcontext

如何使用HttpContext

访问当前页面的ViewState

我有一个我需要实现的ViewStateUtil类:

    public static T GetViewState<T>(ViewStateKey viewStateKey)
    {
       // how to implement it?! HttpContext.Current...?
    }

2 个答案:

答案 0 :(得分:3)

    private static T GetViewState<T>(string name)
    {
        return (T) ((BasePage)HttpContext.Current.CurrentHandler).PageViewState[name];
    }

我添加了一个新的PageViewState属性,让我的所有页面都从我的BasePage继承,以显示ViewState,然后才能获取或设置它。

答案 1 :(得分:1)

如果您只需要对当前页面的ViewState进行一次快速且脏的访问,那么从新的Page类继承就很麻烦。

反思是神奇的(如果慢......当然不要大量使用这个主人!)

var pageType = typeof( Page );
var viewStatePropertyDescriptor = pageType.GetProperty( "ViewState", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic );
var currentPageViewState = (StateBag)viewStatePropertyDescriptor.GetValue( HttpContext.Current.CurrentHandler );
// Now use currentPageViewState["whatYouWant"]