【问题标题】:Capturing Session variables inside Jquery code在 Jquery 代码中捕获会话变量
【发布时间】:2010-12-01 09:19:44
【问题描述】:

我使用 asp.net(webforms 风格)进行服务器编码。假设我在 Session 对象中存储了一个名为“test”的变量。

有没有办法在 javascript js 文件中获取其内容(我使用 Jquery)。目前,我使用以下解决方法 - 在我的 aspx.cs 文件中填充一个隐藏字段,然后在 Jquery 中获取该字段的内容。

这样做的正确方法是什么?

我尝试通过 Web 方法公开会话并使用 $ajax 函数获取 Jquery 端的值,但出现安全错误 - “权限被拒绝” - 没有提供额外的解释。

我的解决方法工作正常,但对我来说似乎相当笨拙。 Jquery中实现会话访问的常用方法有哪些?

【问题讨论】:

    标签: asp.net jquery session webforms


    【解决方案1】:

    你可以use jQuery to call a web method。确保使用[WebMethod(true)] attribute overload 修饰您的方法以使会话状态可用。

    【讨论】:

    • 不,没有任何作用。真令人沮丧。我设置了 EnablePageMethods="true" 并且 WebMethod 返回的值仍然未定义。我的另一个选择是干脆把它吐到隐藏的地方然后从那里捡起来,这看起来相当野蛮。
    • 你有连接到调用的 onError 函数吗?这可能会更清楚地说明您的问题:stackoverflow.com/questions/223308/…
    • 我愿意。在我回到这个之前,我现在正在完成项目的其他部分。我确实想深入了解这一点,谢谢你的回答——这种方式似乎是将服务器变量传递给 Jquery 代码的最合适的方式。目前,我只是将它写到隐藏字段中,但这必须改变。
    • 这里有一个想法:不要使用页面方法,而是使用脚本服务 (msdn.microsoft.com/en-us/library/…)。其他人在页面方法(west-wind.com/weblog/posts/152493.aspx)方面遇到了奇怪的问题,尤其是在涉及母版页时。在自己的服务中隔离功能通常无论如何都是更好的解耦。使用 WebMethod(true) 重载,从而允许访问用户的会话,仍然适用。
    【解决方案2】:

    由于会话驻留在服务器上,JQuery(在客户端)真的不能“直接”访问它。如果您希望页面知道会话变量的值,最好的办法通常是在页面的动态生成部分中包含该值,就像您对隐藏字段所做的那样。您还可以在 .aspx 文件中生成 javascript,如下所示:

    <script type="text/javascript">
        currentSessionName = '<%=Session["CurrentPersonName"].Replace("'", "\\'")%>';
    </script>
    

    【讨论】:

    • 您可能必须在某处将 currentSessionName 声明为变量,例如在静态 .js 文件中。
    • 不是这样的。这 - '' 是问题所在。抱怨有语法错误。
    • @gnomixa:应该在服务器端进行评估,所以它不应该在 javascript 中看起来像那样。你确定你把它放在一个 aspx 文件中?
    • nope 仍然收到错误消息:“编译器错误消息:BC30518:重载解析失败,因为无法使用这些参数调用可访问的'Write'”。我将块放在 aspx 页面上的标题中。我想我只是要以野蛮的方式来做,因为要让它以正确的方式工作需要很长时间。如果有合适的方法。
    猜你喜欢
    • 2018-01-04
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多