我是一名PHP开发人员,他必须处理ASP.net项目,我想知道为什么每个页面都包含在一个表单中。这对我来说没有意义。
还有所有隐藏的输入字段,特别是“视图状态”字段。
答案 0 :(得分:11)
ASP.Net试图让它成为程序员可以假装网络是一个有状态的平台,并且它的行为就像一个桌面应用程序。 ViewState基本上是生成页面状态的序列化块。当页面被回发后,服务器端模型被初始化为ViewState中的值,然后应用发布表单中的新值。
成为一个体面的ASP.Net程序员的一部分是学习何时使用ViewState而不是,因为默认是在任何地方使用它会导致下载页面中出现大量膨胀。
答案 1 :(得分:5)
每个ASP.NET页面都包含在<form>
元素中,因为整个框架都围绕着POST命令。
ASP.NET提供了“Web控件”,它是面向对象的HTML元素抽象(在某些情况下,还包括元素组) - 在服务器端代码中,您可以将命令附加到Web控件上的各种事件(例如,Button.OnClick
,TextBox.OnChanged
) - 框架使用隐藏字段和生成的javascript的组合将它们连接起来。生成的javascript通常会设置一个隐藏字段,几个值来指示(例如)哪个控件触发了post和命令参数(如果适用),然后提交表单。
ViewState
是框架用于序列化客户端状态的技术。它可以替代大量使用会话,交换更大的HTML有效负载以减少服务器上的内存占用。
答案 2 :(得分:3)
ASP.NET(aspx页面)中的所有内容都无法发布数据。
这意味着您通过服务器端操作放置在网页上的任何内容都会导致自身“回发”。回发包含诸如“刚发生的事情”之类的信息以及帮助网页维护状态的一些信息(传统上不执行哪些网页)。视图状态是维护状态任务的一部分。
如果您不喜欢aspx页面尝试将网页转换为表单样式的有状态应用程序的方式,您可以试用ASP.NET MVC框架,它可以让Web按预期工作!
答案 3 :(得分:2)
ASP.NET WebForms引擎通过无状态HTTP创建有状态抽象。
关键对象是服务器页面。控制服务器端处理的火灾事件。控件在请求之间保持其状态(通常是输入值)。
每次单击服务器控件时,都会将“回发”请求发送回服务器。 ViewState实际上包含告诉服务器什么控件触发事件的数据。这就是为什么总有一个表格(不允许任何形式)。