asp.net 在15年前初始设计时,这个应该算是非常“伟大的”架构。它是针对企业web应用而设计的。
然而web编程到了2007年左右,web2.0已经开始成熟,重点赚到了 js 富客户端、结合 ajax 的技术开发上了。而 asp.net 没有把原有的所有控件都重构为纯 ajax 的,反而是放弃了这些东西。因此今天的 asp.net 跟 php甚至jsp相比,不到是更累赘(提供了至少两套互不兼容的开发机制),而且没有提供一点web前端框架的技术含量。
企业web应用开发,已经无法去强调什么 asp.net 的半点技术优势了(只能强调说现在招聘程序员,学不了多少东西的那些人,大多只会asp.net)。只是维护10年前的一些国营企业和政府的OA还比较多。
如果你学习 asp.net 控件开发技术,就会了解这个其实是核心技术。
asp.net 要给程序员提供一个类似 winform 的自动保持所有控件(包括内部子控件)的成千上万状态的机制,不需要程序员自己来开发(例如自己再胡乱写什么隐藏域来保存和提交)状态维系机制。当页面提交(回发)时,例如GridView上的所有数据行、每一行内的所有自定义模板中的子控件等等,你会看到状态都自动重新填好了(哪怕你修改了GridView中某一行的模板中的一个Label的ForeColor属性),这就是靠着网页的ViewState保存着所有控件的状态值。而当用户在浏览器端点击一些操作,例如点击GridView中的“编辑”按钮,页面并不仅仅触发这个Button_Click事件,还要触发Grid的一个Edit事件,等等这类事件,也需要从客户端传给服务器端。
因此 PostData + Event 这两种机制和相关的数据,构成了 asp.net webform 的核心技术。而传统的 web 服务器上有数百个网站,所以asp.net 设计者不用 web 服务器来保存这些数据,而是在页面 html 文本中“夹带”这些信息,随着html的输出而输出,随着 <form /> 的提交而带回,把浏览器端页面当作这些数据的一个存储载体。