asp.net c#MVC:我如何没有ViewState?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (51)

我只是在考虑将WebForms转换为MVC:

在.net MVC中,什么概念使得ViewState不需要?

如果一个表单被发回iteself等(即回发)?page / usercontrol如何保持其状态?

人们为维持某种状态而采取什么样的手段而不诉诸会话状态?

提问于
用户回答回答于

但当然可以。事实上,网络无国界的。事实上,任何相反的想法都是畸变。

Web控件在MVC中消失了。在服务器端没有事件触发。这被两种不同的机制取代 - 网址和发布表单数据。正确使用这些将取代您对ViewState的需求。

在传统的ASP.NET Web应用程序中,可以在您的网页上放置一个可执行函数X的LinkBut​​ton。ASP.NET会将大量ViewState cruft,javascript和其他内容粘贴到网页中,以便当用户单击按钮时和“回发”到网站(通过提交一个没有人知道存在的表单),ASP.NET重建发生的事情并确定一个特定的按钮事件处理程序必须执行。

在MVC中,构建了访问特定路线的链接。该路线描述了用户希望做什么 - / Users / Delinquent / Index(显示所有违规用户的列表)。MVC中的路由系统确定哪个Controller将处理该路由以及该控制器上的哪个方法将执行。任何附加信息都可以通过URL查询字符串值传递给控制器​​方法(对于第5页的违规操作,?页面= 5)。

除了URL之外,还可以使用HTML表单将POST更复杂的信息(例如表单的数据值)或不适合查询字符串(如文件)的内容回写。

所以你通过查询字符串“维护”状态并形成POST值。事实上,你会发现最终没有太多的状态要维护。事实上,不得不保持大量的状态很好地表明你的设计缺乏,或者你正在尝试做一些不适合网站模型的事情。

用户回答回答于

在大多数传统的网络语言中,有状态环境的概念实际上并不常见。ASP.NET Webforms是规则的一个例外,它通过重新创建许多标准来创建该例外。Webforms背后的目标主要是抽象概括HTML和Web开发的概念,以便桌面应用程序和Web应用程序之间的界限从开发角度模糊。这通常意味着ASP.NET Webforms提供的解决方案虽然有效,却是一种千斤顶式的交易实现,它会产生一些非常详细的输出,足以满足大多数人的需求。相反,ASP.NET MVC的核心优势在于它将HTML输出控制权交给了开发人员,并允许他们创建强大架构的RESTful 尽管牺牲了某种程度的便利性,但它们的实现和呈现方式更好,更清晰。

可以说,Webforms模型最大的缺点之一就是ViewState,因为它会使输出混乱,在某些情况下会大幅增加页面大小,而且通常相当于使用手提钻把图片挂起。与其试图在MVC应用程序中使用ViewState(或任何与之类似的应用程序),您应该开始使用明确控制表单中字段的模式,并仅使用最相关的数据来优化输入和输出操作。除了标记的变化之外,您还将学习如何构建更好的设计解决方案,以便在您的应用程序和外部环境中使用。

我喜欢做的第一个比较就是:Webforms构建Web页面,但MVC构建Web应用程序。如果日常工作主要是构建网站的各个部分,或者添加小块功能,通常会发现Webforms更容易,更省时; 另一方面,如果你想构建一个可测试,可扩展且灵活的完整应用程序,那么MVC就是你的调用。

扫码关注云+社区