视图状态在静态方法内部不工作
本文关键字:工作 内部 静态方法 视图状态 | 更新日期: 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,然后可以获取或设置它。