视图状态在静态方法内部不工作

本文关键字:工作 内部 静态方法 视图状态 | 更新日期: 2023-09-27 18:00:15

我创建了一个web方法,用于从java脚本调用函数。在我的aspx代码后面有一个视图状态["cust_id"]。我想在公共静态方法中使用这个cust_id。但我做不到。请帮我做这个。

  [WebMethod]
  public static void add_plan_items(string plans)
  {
    string cust_id = Convert.ToString(ViewState["cust_id"]);//Error : object reference is required for non-static ...
  }

视图状态在静态方法内部不工作

错误是因为ViewSate对象与页面附加在一起。这就是为什么你不能在静态方法中使用它。。

相反,您需要将cust_id作为参数传递给该方法,因此您的方法将类似

  [WebMethod]
  public static void add_plan_items(string plans,string cust_id)
  {
     //your code
  }

我们可以在web服务中使用会话,而不是查看状态
只需在web方法中启用会话true

[WebMethod(EnableSession = true)]
public static Boolean AddRecord(string contextKey)
{
    List<MID1> MID1s = HttpContext.Current.Session["MID1s"] as List<MID1>;
    using (var ctx = new Entities())
    {
        Boolean RetVal = false;
        MID1s = new List<MID1>();
        MID1 objMID1 = new MID1();
        objMID1.ItemID = 1;
        MID1s.Add(objMID1);
        HttpContext.Current.Session["MID1s"] = MID1s;
        return RetVal;
    }
}

我在这里看到了一个类似的问题
如何使用HttpContext访问当前页面的ViewState?
这表明我可以使用httpcontext 访问视图状态

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

我添加了一个新的PageViewState属性,并让我的所有页面从BasePage继承以公开ViewState,然后可以获取或设置它。