asp.net – 从aspx页面中的Static方法访问ViewState
发布时间:2020-12-16 04:22:10 所属栏目:asp.Net 来源:网络整理
导读:假设我有一个静态方法,我需要从该方法访问viewstate …我怎么能这样做…我知道这是不可能的,但必须有一些出路. [WebMethod] public static string GetData(int CustomerID) { string outputToReturn = ""; ViewState["MyVal"]="Hello"; return outputToRetur
假设我有一个静态方法,我需要从该方法访问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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容