为什么ASP.NET要将页面包装在一个表单中?

9
我是一名PHP开发人员,现在需要处理ASP.net项目,但我不明白为什么每个页面都要用表单包裹起来。这对我来说毫无意义。
此外,这些隐藏的输入字段是什么意思,特别是“View State”?

3
应明确指出这是ASP.NET Web Forms,而不是更类似于您所熟悉的PHP环境的ASP.NET MVC。 - MikeJ
4个回答

11

ASP.Net致力于让程序员可以假装Web是一个有状态的平台,并且它的行为类似于桌面应用程序。ViewState基本上是页面生成时状态的序列化块。当页面被提交回服务器时,服务器端模型将被初始化为ViewState中的值,然后应用来自提交表单的新值。

成为一个优秀的ASP.Net程序员的一部分是学会何时使用ViewState以及何时不使用,因为默认情况下在每个地方都使用ViewState会导致下载的页面存在大量臃肿的内容。


5
每个ASP.NET页面都包含在一个<form>元素中,因为整个框架都围绕POST命令展开。
ASP.NET提供了“Web控件”,它们是HTML元素(有时是元素组)的面向对象抽象 - 在服务器端代码中,您可以将命令附加到Web控件上的各种事件(例如,Button.OnClickTextBox.OnChanged) - 框架使用隐藏字段和生成的javascript将这些连接起来。生成的javascript通常设置几个隐藏字段值来指示(例如)哪个控件触发了post和命令参数(如果适用),然后提交表单。 ViewState是框架用于序列化客户端状态的技术。这是一种替代大量使用会话的方法,通过以较低的服务器内存占用为代价,交换更大的HTML负载。

3

ASP.NET(aspx页面)中的所有内容都是基于数据提交工作的。

这意味着,任何你在服务器端执行的操作都将导致“回传”到自身。回传包含诸如“刚刚发生了什么”以及一些信息,有助于网页维护状态(传统上网页不具备此功能)。视图状态是维护状态的任务之一。

如果你不喜欢aspx页面试图将网页转换为类似表单的有状态应用程序的方式,可以尝试使用ASP.NET MVC框架,让网页按照本来的意图工作!


2

ASP.NET WebForms引擎在无状态的HTTP上创建了有状态的抽象。

关键对象是服务器页面。控件触发事件并在服务器端进行处理。控件在请求之间维护其状态(通常是输入值)。

每次单击服务器控件时,都会向服务器发送一个“回发”请求。ViewState实际上包含告诉服务器哪个控件触发了事件的数据。这就是为什么总是有一个表单(不允许使用多个表单)的原因。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接