简单说,ViewState 是 Web Forms 用来“欺骗”开发者、让无状态的 HTTP 看起来像有状态桌面应用的一个技巧。而 MVC/Razor Pages 回归了 Web 的本质——无状态。

它们是这样解决问题的:

1. 直接放弃,拥抱无状态

MVC 和 Razor Pages 完全抛弃了 ViewState 这种机制。它们接受 HTTP 是无状态的,所以每次提交表单,后端收到的就是一个全新的、没有“记忆”的页面实例。

  • Web Forms 的做法:把页面上所有控件的值(如文本框内容、下拉框选项)都序列化进一个叫 __VIEWSTATE 的隐藏字段。页面回发时,再反序列化回来,恢复控件的状态。

  • MVC/Razor 的做法:页面提交时,只发送 

     标签里的用户输入值(通过 name/value 键值对)。后端根据这些数据,重新构建一个对象或模型。

2. 数据持久化要靠你手动完成

因为没有 ViewState,MVC/Razor 就需要你明确地告诉程序:数据要从哪里来,要保留到哪里去。

  • 跨请求保留数据:

    • 如果想在两次请求之间记住用户输入,你会显式地去做:

      • 存入数据库。

      • 存入Session(会话)。

      • 存入Cookie。

      • 或者把数据放在隐藏字段里(这个隐藏字段是你主动加的,和 Web Forms 自动生成的巨型 ViewState 完全不同)。

  • 模型绑定:这是 MVC/Razor 的核心。它会自动把表单提交的 name/value 对,映射到你的 C# 模型对象上。例如,表单里有个 name="userName" 的输入框,后台的 User 模型对象的 Name 属性就能自动获得这个值。没有 ViewState 一样工作得很好。

3. 这样做的巨大优势

放弃 ViewState 换来了三个实实在在的好处:

  • 页面体积小:没有那个几十到上百 KB 的 __VIEWSTATE 隐藏字段,页面加载飞快。

  • 开发更可控:数据传输完全透明,你很清楚数据从哪里来、到哪里去。不会再出现 Web Forms 里那种“改了 ViewState 结果页面不更新”的诡异问题。

  • 更符合 Web 标准:生成的 HTML 干净、简洁,用任何前端框架(Vue/React)都很方便,对 SEO(搜索引擎优化)也更友好。

 

总结:MVC 和 Razor Pages 不是“解决”了 ViewState 的问题,而是从根本上抛弃了这种不符合 Web 无状态特性的设计,转而用更轻量、更透明的模型绑定来替代。所以,你完全不用担心 ViewState 的问题。


原文地址: https://www.cveoy.top/t/topic/qGqi 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录