同事在开发项目时,用到了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也是这个现象。

解决方案 »

  1.   

    不知楼主用什么方式在前台接值,可以写一个隐藏域,用<%=%>。如果是EL表达式的话就简单了。${""}就行了
      

  2.   

    用这种方式接:
    document.getElementById(“lblUseriD”).innerHTML=frmEmployee.getUserId().value;
    能不能给个例子啊 
      

  3.   


    Ajax.Method() 
    public string getUserId() 

      return Session["userID"].ToString(); 
      

  4.   

    如果
    document.getElementById(“lblUseriD”).innerHTML=frmEmployee.getUserId().value;
    这样调用的话 ,Session["userID"].ToString();是空值,因为ajax是异步到的,不会与当前会话同步 ~~
      

  5.   

    用Ajax第二种用法:(需下载两个配置文件,需引用。下载地址:www.schwarz-interactive.de
      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的值而发愁!!!!!!
      

  6.   

    忘说啦:把哪个引用文件放在bin文件夹下,以免项目移走时引用文件找不到!不然运行就出错啦
      

  7.   

    frmEmployee.getUserId()
    frmEmployee是一个对象?
    请问您用Ajax用的是什么传输方式?用到json吗?
      

  8.   


    frmEmployee是ASP.NET页的类啊 
      

  9.   

    在Page_load中添加AjaxPro.Utility.RegisterTypeForAjax(typeof(Register));这样就俱全啦,上次忘说啦
      

  10.   

    try to see this:http://hi.baidu.com/sohighthesky/blog/item/fb171b2a05890bf2e6cd40c3.html
      

  11.   

    没什么原理的,去看看ajaxpro的原理吧