我如何访问一个webmethod中的会话?
我可以在WebMethod
使用会话值吗?
我已经尝试使用System.Web.Services.WebMethod(EnableSession = true)
但是我无法像本例中那样访问Session参数:
[System.Web.Services.WebMethod(EnableSession = true)] [System.Web.Script.Services.ScriptMethod()] public static String checaItem(String id) { return "zeta"; }
这里是调用webmethod的JS:
$.ajax({ type: "POST", url: 'Catalogo.aspx/checaItem', data: "{ id : 'teste' }", contentType: 'application/json; charset=utf-8', success: function (data) { alert(data); } });
您可以使用:
HttpContext.Current.Session
但是,除非你指定了EnableSession=true
否则它将是null
:
[System.Web.Services.WebMethod(EnableSession = true)] public static String checaItem(String id) { return "zeta"; }
有两种方法启用Web方法的会话:
1. [WebMethod(enableSession:true)] 2. [WebMethod(EnableSession = true)]
第一个构造函数参数enableSession:true
不适用于我。 第二个与EnableSession
属性起作用。
你可以尝试像这样[WebMethod] public static void MyMethod(string ProductID,string Price,string Quantity,string Total)//添加新的参数 尝试{
DataTable dt = (DataTable)HttpContext.Current.Session["aaa"]; if (dt == null) { DataTable dtable = new DataTable(); dtable.Clear(); dtable.Columns.Add("ProductID");// Add new parameter Here dtable.Columns.Add("Price"); dtable.Columns.Add("Quantity"); dtable.Columns.Add("Total"); object[] trow = { ProductID, Price, Quantity, Total };// Add new parameter Here dtable.Rows.Add(trow); HttpContext.Current.Session["aaa"] = dtable; } else { object[] trow = { ProductID, Price, Quantity, Total };// Add new parameter Here dt.Rows.Add(trow); HttpContext.Current.Session["aaa"] = dt; } } catch (Exception) { throw; } }
如果会话已启用,请查看您的web.config。 这篇文章可能会给出更多的想法。 https://stackoverflow.com/a/15711748/314373
对于启用会话,我们必须使用[WebMethod(enableSession:true)]
[WebMethod(EnableSession=true)] public string saveName(string name) { List<string> li; if (Session["Name"] == null) { Session["Name"] = name; return "Data saved successfully."; } else { Session["Name"] = Session["Name"] + "," + name; return "Data saved successfully."; } }
现在使用会话来检索这些名字,我们可以这样做
[WebMethod(EnableSession = true)] public List<string> Display() { List<string> li1 = new List<string>(); if (Session["Name"] == null) { li1.Add("No record to display"); return li1; } else { string[] names = Session["Name"].ToString().Split(','); foreach(string s in names) { li1.Add(s); } return li1; } }
所以它会从会话中收回所有的名字并显示。