我创建了一个用于从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 ...
}
答案 0 :(得分:3)
错误是因为ViewSate
对象随页面附加。这就是为什么你不能在静态方法中使用它..
而不是这个,你需要将cust_id
作为参数传递给方法,所以你的方法就像
[WebMethod]
public static void add_plan_items(string plans,string cust_id)
{
//your code
}
答案 1 :(得分:2)
我们可以在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;
}
}
答案 2 :(得分:0)
我在这里看到了类似的问题
How could I access the ViewState of the current page using HttpContext?
哪些建议我可以使用httpcontext
private static T GetViewState<T>(string name)
{
return (T) ((BasePage)HttpContext.Current.CurrentHandler).PageViewState[name];
}
我添加了一个新的PageViewState属性,让我的所有页面都从我的BasePage继承,以显示ViewState,然后才能获取或设置它。