2

我创建了一个从 java 脚本调用函数的 web 方法。在我的 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 ...
  }
4

3 回答 3

3

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

而不是这个你需要cust_id作为参数传递给方法,所以你的方法就像

  [WebMethod]
  public static void add_plan_items(string plans,string cust_id)
  {
     //your code
  }
于 2013-02-19T06:14:09.430 回答
2

我们可以在 Web 服务中使用会话来代替视图状态。
只需在 web 方法中启用 session 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;
    }
}
于 2014-10-16T06:50:17.050 回答
0

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

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

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

于 2013-02-19T06:21:38.230 回答