ASP.NET页的客户端
发出的警告,但 ASP.NET 仍将成功编译该页。如果缺少 ID 属性,则会生成随机字 符串,并将其绑定到 name 属性。<asp:Button> 标记转换为 <input type="submit"> 按钮。<asp:Label> 标记将在客户端浏览器上转换为 HTML 的 <span> 标记。
在大多数情况下(虽然不是全部),带有 runat="server" 属性 的每个标记都将生成一个对应的 HTML 标记块。ID 字符串将保证两个块之间稳定的匹配关系:一个在客 户端,另一个在服务器端。在图 3 中可以看到,两个隐藏字段用于填充了 HTML 标记:__VIEWSTATE 和 __EVENTVALIDATION。 视图状态字段 __VIEWSTATE 字段的内容代表了页面最后在服务器上 处理时的状态。尽管被发送到了客户端,但视图状态并不包含客户端应当使用的任何信息。存储在视图状 态中的信息只涉及服务器页和它的一些子控件,并且由服务器独占读取、使用和修改。 通过采用 此实现方式,视图状态可以不使用任何关键服务器资源,因此可以快速检索和使用。另一方面,正是因为 视图状态与页面组合在一起,因此必然会使 HTTP 请求和响应的大小增加几千字节。注意,包含若干数据 的实际页面的视图状态大小很容易达到 20KB。而每次进行上传和下载时都要包括这个额外的负载量。视 图状态是 ASP.NET 的最重要功能之一,因为它可以基于诸如 HTTP 这样的无状态协议实现状态编程。虽 然使用时不需要严格的条件,但视图状态很容易成为页面的负担。 通过重写代码文件类的两个方 法,可以将视图状态字段的内容留在服务器上、存储在数据库、缓存或会话对象中。但请注意,将视图状 态信息留在服务器上并非像一开始感觉的那样是一个顺理成章的解决办法。实际上,ASP.NET 团队选择基 于页的视图状态并不是偶然的。只要用户沿着应用程序中的链接从一页导航到下一页,基于服务器的视图 状态确实是个好的选择。请记住,ASP.NET 应用程序的工作方式是在同一页上进行重复发布。但是,如果 用户单击“后退”按钮,情况会如何呢?为了安全起见,应当基于每个请求而不是基于每个页 来维护视图状态。而且,被跟踪的请求链应当与用户通过“后退”和“前进”按钮 可以到达的请求相匹配。将视图状态存储在客户端可能不是一个完美的方案,但存储在服务器上同样也有 其不足。对于您的应用程序来说,更为可取的选择取决于您对应用程序的要求。 在 ASP.NET 2.0 中,__VIEWSTATE 隐藏字段包含两种类型的信息:视图状态和控件状态。开发人员可 以完全禁用视图状态,并以纯粹的无状态方式运行其应用程序。只要您使用内置的控件和您自己编写的控 件,或者至少是您可以访问其源代码的控件,这就不是问题。如果使用了已启用视图状态的自定义控件, 情况会怎么样呢?某些控件(通常是大量第三方和自定义的控件)需要跨回发持久保存私有信息。此信息 不是公共的,并且不准备对应用程序级别公开,例如,下拉面板的折叠/展开状态。此信息只能保存在视 图状态。如果禁用视图状态,则控件可能会意外地失去作用。 为了缓解这一问题,ASP.NET 2.0 引入了控件状态的概念。每个服务器控件都可以将任何关键属性打包到集合,并将它存储到页面的控件状 态中。控件状态保存到 __VIEWSTATE 字段,但与传统的视图状态不同,它不能被禁用,并且始终可用。 开发人员通过 Page 类的一对新的可重写方法 LoadControlState 和 SaveControlState 来管理控件状态 。但是,谈到 ASP.NET 2.0 中的视图状态,还应当注意到该版本采用了更为有效的新序列化算法,来使 各个控件的状态有效地存储在隐藏字段中。因此,在大多数情况下,__VIEWSTATE 隐藏字段的总体大小是 ASP.NET 1.x 中的相应字段大小的一半。 前面提到过, |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |