同事在开发项目时,用到了session,viewstate用来保存用户id和用户名字,大体的写法是
private string strUserId;
Page_load()
{
strUserId=Session["userID"].ToString();
}
然后后台有这么一个方法
Ajax.Method()
public string getUserId()
{
return strUserId;
}
在前台如果在代码显示块中引用的话
没有问题,可以得到该用户的值。比如
<%=getUserId();%>
但是在前台如果用ajax方法的话,
比如
document.getElementById(“lblUseriD”).innerHTML=frmEmployee.getUserId().value;
得到的值就是个空值。
大体原因是因为ajax调用该方法是,不会经过page_load方法了,只会走默认的构造函数,也就是没有办法给strUserId变量赋值了。这可能也是ajax异步造成的原因。
请问高手们 你们是如何解决的,有什么好的方法么?用viesstate也是这个现象。
private string strUserId;
Page_load()
{
strUserId=Session["userID"].ToString();
}
然后后台有这么一个方法
Ajax.Method()
public string getUserId()
{
return strUserId;
}
在前台如果在代码显示块中引用的话
没有问题,可以得到该用户的值。比如
<%=getUserId();%>
但是在前台如果用ajax方法的话,
比如
document.getElementById(“lblUseriD”).innerHTML=frmEmployee.getUserId().value;
得到的值就是个空值。
大体原因是因为ajax调用该方法是,不会经过page_load方法了,只会走默认的构造函数,也就是没有办法给strUserId变量赋值了。这可能也是ajax异步造成的原因。
请问高手们 你们是如何解决的,有什么好的方法么?用viesstate也是这个现象。
document.getElementById(“lblUseriD”).innerHTML=frmEmployee.getUserId().value;
能不能给个例子啊
Ajax.Method()
public string getUserId()
{
return Session["userID"].ToString();
}
document.getElementById(“lblUseriD”).innerHTML=frmEmployee.getUserId().value;
这样调用的话 ,Session["userID"].ToString();是空值,因为ajax是异步到的,不会与当前会话同步 ~~
1.右击站点名字点add reference添加AjaxPro.2.dll的引用,如果你用的是vs2003,则添加对AjaxPro.dll的引用,然后我们在添加个web.config文件(很郁闷的是vs2005不再自动添加web.config文件拉),修改web.config如下: <!--
所有的ajaxpro/*.ashx请求都由Ajax.PageHandlerFactory处理,
而不是由默认的System.Web.UI.PageHandlerFactory处理程序工厂来处理。 相当于Java中的过滤器
-->
<httpHandlers>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>
</httpHandlers>
2.针对你获不到session值的这种缺陷,可以在指定AjaxMethod服务器端方法时,给予session读写的权限
//这样制定可以获得session中的值
[AjaxPro.AjaxMethod(AjaxPro.HttpSessionStateRequirement.ReadWrite)]
public string getUserId()
{
string strUserId= HttpContext.Current.Session["userID"].ToString();
return strUserId;
}
用这种方法你的问题就可以解决啦,而且不用为得不到session的值而发愁!!!!!!
frmEmployee是一个对象?
请问您用Ajax用的是什么传输方式?用到json吗?
frmEmployee是ASP.NET页的类啊