我有一个简单的ASP.NET C#网页;让我们说default.aspx。在那里有一个按钮;单击该按钮会在后面的代码中执行以下操作:
Session["groupid"] = 1;
并且值1实际显示在文本框中。到现在为止还挺好。然后我在.asmx文件中也有一个与default.aspx页面相同级别的Web服务。该Web服务由Jquery Ajax函数调用。我想要做的是使用groupid
的会话变量进行一些SQL查询。这是我在Web服务中的代码:
[WebMethod(EnableSession = true)]
public string GetRoomDataAttributes()
{
if (Session["groupid"] != null)//always has no value?
{
string session_groupid = HttpContext.Current.Session["groupid"] as string;// *** edit: this should have the value of 1
}
}
在上面的代码中,确实有一个' groupid'在Session对象中,但它没有值;它应该有1作为值。困扰我的是,该值不为空,但没有实际数据。
有什么想法吗?
感谢。
答案 0 :(得分:0)
ASMX服务和ASP.NET页面实际上并没有使用相同的会话 - 这就是为什么值不会从一个会话转移到另一个会话。
连接到Web服务时,应确保Web服务客户端也将会话令牌从ASPX传递到ASMX。
答案 1 :(得分:0)
建立会话变量并使Web服务识别会话的关键值时没有问题。我认为我的问题是试图解析价值。这是我最终做的解析:
if (HttpContext.Current.Session["groupid"] != null)
{
int? session_groupid = (int?)Session["groupid"];
}
非常沮丧地想出这个但是学到了一些新东西。谢谢大家的帮助!
HTH。
答案 2 :(得分:0)
问题是您尝试使用int
运算符将string
值(1)解析为as
。
实际上你要问的是:如果它是一个字符串,请将session_id
设置为会话变量group_id
。好吧,那永远不会是真的,因为它是int
。
您可以直接将其分配给int?
,因为它会正确转换null
个值:
int? session_groupid = (int?)HttpContext.Current.Session["groupid"];