我想将 asp 会话传递给 javascript 变量

i want to pass an asp session to javascript variable

好的,这是我的 ASP 登录页面代码,成功后我创建了一个会话,即 Session["role"]="user",我想将该值传递给 HiddenField1 然后我试图在 JavaScript 中获取此值但是当我 console.log HiddenField 值时我总是得到 null 即使我已经尝试了几乎所有建议的解决方案......如果有人能解决问题请给个方法

Asp代码

 if (dr.HasRows)
                {
                    if(dr.Read())
                    {
                        //Response.Write("<script> alert( 'the user  : "+dr.GetValue(8).ToString()+" Successfully Logged in')</script>");


                        Session["username"]=dr.GetValue(8).ToString();
                        Session["fullname"] = dr.GetValue(0).ToString();


                        Session["role"] = "user"; 


                      HiddenField1.Value = Session["role"].ToString();
                    Response.Write("<script> alert("+HiddenField1.Value+")</script>");
                        Session["status"] = dr.GetValue(10).ToString();

                    }

                    ScriptManager.RegisterStartupScript(this, GetType(), "popup", "MyAlertFunOnSucc()", true);
                   Response.Redirect("homePage.aspx");


                }

JAVASCRIPT 在主页头

<script type="text/javascript">
    var array_store;
   
        array_store = document.getElementById("HiddenField1").value;
        console.log(array_store);
   
</script>

这是我的隐藏字段


        <asp:HiddenField ID="HiddenField1" runat="server" />

这是错误 homePage.aspx:28 Uncaught TypeError: Cannot read properties of null (reading 'value')

您可以使用处理程序(.ashx 文件)返回会话值,然后在前端调用 ajax 来获取该值,或者在后端使用具有 [WebMethod] 属性的方法和ajax 在前端调用以获取会话值。

好的,所以您可能已经花了一些时间CRYSTAL清楚您在这里有一个母版页?

但是,你有这个代码:

  HiddenField1.Value = Session["role"].ToString();
                Response.Write("<script> alert("+HiddenField1.Value+")</script>");
                    Session["status"] = dr.GetValue(10).ToString();

                }

                ScriptManager.RegisterStartupScript(this, GetType(), "popup", "MyAlertFunOnSucc()", true);
               Response.Redirect("homePage.aspx");

您确实知道响应重定向的作用,对吧?它炸毁了当前页面、当前 class 和当前控件。然后你说请忘记这个页面,现在重定向到一个全新的页面。 (主页)。

那么,你怎么能注入一个脚本,然后决定转储整个当前页面而不是将它发送给客户端,然后重定向到一个完全不同的页面????

这意味着您需要put/place/have设置隐藏控件的代码,并将注册脚本移动到主页代码。因此,在主页上(是 PostBack = false),您可以设置隐藏字段,然后执行您的注册脚本。

但是,对于您当前的设置,通过执行重定向到一个全新的页面、您的注册脚本,实际上什至您对隐藏字段的设置——如果在设置隐藏字段之后,两者都毫无意义,并将脚本扔到 运行?

然后你说忘记所有这些,然后转移到一个全新的不同页面。

所以,移动你设置隐藏字段的代码,并将脚本注册到主页的加载(页面加载事件)。