服务器端视图状态可以解决ASP.NET的一个最大问题吗?

时间:2009-03-12 20:18:51

标签: asp.net viewstate

我已经阅读了一些关于ASP.NET MVC是否值得从“常规”ASP.NET迁移的SO文章。使用MVC的最大原因之一我已经看过引用了不必使用Viewstates。

但是,可以通过在this article显示的服务器上存储视图状态信息来消除视图状态。我已经在一个示例项目中尝试过它,它工作得很好,就我注意到它而言是完全透明的并且非常容易实现。

那么,捕获的地方在哪里?我预计它会给服务器带来稍高的负载,但它真的会那么糟糕吗?如果没有,为什么没有更多的人使用这种方法而不是抱怨观点状态?

4 个答案:

答案 0 :(得分:2)

viewstate唯一的问题是滥用它。这很容易发生,因为默认设置是全部打开。您甚至无法在页面上默认关闭它,并有选择地打开特定控件(他们将在4.0上添加对此的支持)。您将看到很少的代码,其上有viewstate = false,并且信息列表可以快速获得。

甚至有一些第三方控件滥用它。我不得不帮助找出为什么页面非常慢(因为它甚至不起作用),结果显示下载的信息量很大,原因是viewstate的内容大小是其大小的10倍(真的)它是第三方控件,喜欢存储你交给它的所有东西(它真的很难看,因为它被传递给对象的层次结构)。

所以真正的问题不是观点状态,而是它的大小。如果您已经遇到大型视图状态的问题(正常大,而不是上述的极端),那么将其移动到服务器上的会话意味着您将存储大量信息。这将问题从一个地方转移到另一个地方,可能会减轻一些影响,但它并没有解决真正的问题,存储太多不需要的状态(因为开发人员或某些第三方的东西都是行为不端)。

那就是说,我不认为我会把它称为常规asp.net方法的唯一主要问题。不要把它当作“不要随之发展”,而更像是“如果你要在它上面发展,那就更好地了解它”。我经常使用asp.net工作,它可以很好地工作。如果我现在开始讨论它,我想我会选择使用asp.net mvc,因为我认为常规的asp.net需要开发人员更多的东西才能做到正确。

答案 1 :(得分:1)

我倾向于不同意迁移到ASP.NET MVC就是删除viewstate的说法。在决定是否转移到ASP.NET MVC时,ViewState的使用或其他方面是一个小问题。更重要的是你的模型(定义你的问题区域的类型)你的控制器(描述用户如何与你的网站交互的代码)和你的视图(生成HTML或你喜欢的任何其他标记的渲染逻辑)之间的分离。

关于将viewstate放入您的服务器,这很可能成为可扩展性的瓶颈 - 如果您有一个多Web服务器站点,那么您需要能够从所有这些服务器访问该viewstate。然后,您需要担心清除该视图状态 - 当它嵌入页面时没有什么可考虑的,但是如果它存储在服务器上那么页面的视图状态应保留多长时间?

基本上,viewstate存在的原因是支持Web开发的“Web表单”方法,其中页面回发到服务器以便自我更新。我认为大多数人都希望避免使用这种Web开发方法,而不是查看自身。无状态标记,以及需要时的AJAX更新,使得应用程序更加清晰,并且可以更容易地应用输出缓存等事项。

答案 2 :(得分:0)

您的项目越大和/或您使用它的人越多,对您的表现的微小影响就会变得非常大。

答案 3 :(得分:0)

说实话,大多数时候你可以调整视图状态 - 很多开发人员,包括我,不要通过所有不需要它的控件并禁用它 - 我倾向于发现我只需要视图状态的东西像datagrids一样,大多数其他控件都可以正常工作,但正如我所说,我不会像往常那样经常这样做。

相关问题