假设我有一个静态方法,我需要从该方法访问viewstate …我怎么能这样做…我知道这是不可能的,但必须有一些出路.
[WebMethod] public static string GetData(int CustomerID) { string outputToReturn = ""; ViewState["MyVal"]="Hello"; return outputToReturn; }
解决方法
您可以通过
HttpContext.CurrentHandler获得对页面的引用.但是由于
Control.ViewState
受到保护,您无法访问它(不使用反射),而不是可通过HttpContext.Current.Session访问的Session.
因此,要么不使用静态方法,请使用Session或使用此反射方法:
public static string CustomerId { get { return (string)GetCurrentPageViewState()["CustomerId"]; } set { GetCurrentPageViewState()["CustomerId"] = value; } } public static System.Web.UI.StateBag GetCurrentPageViewState() { Page page = HttpContext.Current.Handler as Page; var viewStateProp = page?.GetType().GetProperty("ViewState",BindingFlags.FlattenHierarchy | BindingFlags.Instance | BindingFlags.NonPublic); return (System.Web.UI.StateBag) viewStateProp?.GetValue(page); }
但是,如果通过WebService调用,则无效,因为它超出了Page-Lifecycle.