sfr*_*der 3 vb.net asp.net session
我正在使用这个例子,我发现如何通过它们加载类文件和访问变量.这是在App_Code文件夹中名为Class1.vb的文件中(这不是应用程序项目):
Imports Microsoft.VisualBasic
Public Class my_class
Public Shared Sub my_sub()
Dim vartest As String
vartest = 10
HttpContext.Current.Session("myvar") = vartest
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
这是aspx文件的代码隐藏:
Imports my_class
Partial Public Class test
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
my_class.my_sub()
Label1.Text = HttpContext.Current.Session("myvar")
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
如何在不使用会话的情况下访问vartest变量,因为如果多个函数同时访问该变量,则可以覆盖该变量.是否可以采用另一种方式,将变量发送到类文件?
Joe*_*orn 12
听起来您需要快速了解一些基本的ASP.Net Webforms概念.首先我会反击一个常见的新手误解:
我认为许多新的ASP.Net开发人员都有这样的想法,即Web服务器为每个访问其站点的用户会话保留其页面类的单个实例,并且每个回发或事件使用相同的页面类实例.这不是它的工作原理.ASP.Net页面类实例几乎总是在一秒钟之内再次创建和销毁,而且大多数经验丰富的开发人员认为它需要更长时间才是一个大问题.
这里要记住的是ASP.Net仍然依赖于HTTP协议,http归结为请求和响应.当您查看网页时,您的浏览器首先会向服务器发送请求.服务器通常使用html文档进行响应.然后浏览器将解析html; 根据它在html中看到的内容,浏览器可以向服务器发送更多请求以获取其他资源,例如javascript,图像或css文件.每个请求都会产生一个单独的响应,浏览器会使用所有这些资源将页面呈现给屏幕.但是,ASP.Net运行时通常不必处理额外的请求(这会使事情变慢) - 初始html需要ASP.Net支持; 您希望其他资源是可以缓存的基本文件.
当ASP.net运行时处理页面请求时,它将创建页面类的新实例.运行时将遵循ASP.Net页面生命周期(这实际上应该命名为"ASP.Net页面请求生命周期"),并按照生命周期定义的特定顺序调用某些方法或在此类实例中引发某些事件.
这意味着每个回发或事件都在您班级的不同实例中运行.
这也意味着每个回发或事件都在重建并传输进入您页面的所有 html,而不仅仅是您想要更改的部分.对于您的服务器代码,结果是类级变量在ASP.Net中唯一真正有用的东西是将在单个http请求中使用的东西.对于浏览器,结果是你在每次活动后都使用全新的DOM.
要理解所有这些,在这里重要的是要很好地理解类和类实例之间的区别.你问题中的几个项目让我不确定你是否有这种理解.
Web服务器通常只有一个应用程序实例用于整个网站及其所有用户.因此,具有共享/静态范围的任何内容对每个用户都是通用的.ASP.Net中很少适用于任何共享/静态的东西.
这究竟该是什么Session是.在任何给定时间,会话始终对于单个请求是唯一的.您担心同时访问会话的多个功能,但这不会发生.ASP.Net页面生命周期确保除非您手动生成其他线程,否则对于给定的HttpContext和Session,一次只运行一个函数.如果用户以几乎同时发送两个具有相同Session/HttpContext的请求,则ASP.Net运行时将保留一个请求,直到另一个完成.如果您不想一直引用会话,则可以在类中构建包含会话变量的属性.请参阅@ Pankaj的答案.
| 归档时间: |
|
| 查看次数: |
7905 次 |
| 最近记录: |