asp.net – 从aspx页面中的Static方法访问ViewState

前端之家收集整理的这篇文章主要介绍了asp.net – 从aspx页面中的Static方法访问ViewState前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有一个静态方法,我需要从该方法访问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.

原文链接:https://www.f2er.com/aspnet/248061.html

猜你在找的asp.Net相关文章