【发布时间】:2010-09-30 03:36:41
【问题描述】:
如何使 ASP.net 会话数据可用于 JavaScript 方法?我在谷歌上找到了this 链接。任何人都有一个不使用 ScriptManager 的更好的技巧吗?
【问题讨论】:
-
你应该看看 slolife 的回答。它的一流!
标签: asp.net javascript session
如何使 ASP.net 会话数据可用于 JavaScript 方法?我在谷歌上找到了this 链接。任何人都有一个不使用 ScriptManager 的更好的技巧吗?
【问题讨论】:
标签: asp.net javascript session
您必须以某种方式将其放入页面中。使用隐藏的表单域是一种方法。使用链接之类的 web 方法是一种更复杂的方法,它为您提供了一些 ajax 功能。
如果您实际上不需要从服务器更新此值,除了回发,您可以使用隐藏输入控件HtmlInputHidden。
【讨论】:
对实现 IRequiresSessionState 的 ASHX 的常规 AJAX 调用
你到底为什么要这么做?
【讨论】:
老实说,ScriptManager 方法看起来很简单。滚动您自己的解决方案将需要服务器端的 HttpHandler 和 Ajax 调用,在这种情况下似乎不值得麻烦。
【讨论】:
会话的目的是向客户端隐藏详细信息。在我看来,您应该将其转换为使用 cookie,这显然很容易通过 javascript 检索。
【讨论】:
我可以看到两种选择:
#2 可能是 ScripManager 代码所包含的内容,无论如何您都应该使用它。但我会谨慎决定您要发送给客户端的会话数据,并且我会使用白名单仅返回我实际需要发送给客户端的会话数据。
【讨论】:
如果放弃 ScriptManager 是您的目标,那么公开页面方法仍然是一个不错的选择,只需使用不依赖 ScriptManager js 库的 javascript。
我喜欢链接页面中提出的解决方案,但它可能过于开放。也许您想为您希望允许访问的任何/所有 Session 项目创建一个强类型和受控的 PageMethod。这样您就不会意外访问某些秘密 Session 值。
另外,我认为您需要使用标记 PageMethod
VB
WebMethod(EnableSession:=True)
C#
WebMethod(true)
因为我不认为 EnableSession 默认开启。
【讨论】: