无法隐藏ASP.NET中的VIEWSTATE隐藏字段

3
我需要在ASP.net页面的运行时隐藏VIEWSTATE和EVENTVALIDATION隐藏域。
我成功地移除了EVENTVALIDATION,如下所示.............
<%@ Page enableEventValidation="false" EnableViewState="false" %>

但是VIEWSTATE仍然存在,我无法摆脱它,但我需要摆脱它(很难解释为什么)。

有没有其他方法可以摆脱它?

谢谢!


您能将视图状态加密吗? - Phil
5个回答

4

您需要在页面上覆盖以下方法:

protected override void SavePageStateToPersistenceMedium(
object viewState)
{
}

protected override object LoadPageStateFromPersistenceMedium()
{
    return null;
}

看这里:http://weblogs.asp.net/ngur/archive/2004/03/08/85876.aspx。如果您愿意,可以使用此代码来重命名viewstate变量,但我建议不要这样做。从表单中删除runat="server"也可以像其他人建议的那样起作用。没有viewstate,您将无法使用asp.net控件。您可能需要重新考虑您尝试做什么以及为什么需要摆脱viewstate部分。

3
为了完全删除__VIEWSTATE,您需要摆脱<form runat="server">标签。当然,您将无法使用需要在服务器表单中呈现的控件。

天啊,是的,我需要它,因为我正在使用ASP.NET控件。 - Etienne
@Etienne:这就是你为使用Web Forms这种具有状态框架所付出的代价。顺便说一句,你可以在服务器端表单之外使用许多ASP.NET控件,它们并不都需要这个。 - Mehrdad Afshari
@Ralph:有些人称之为“ZeroForm”方法:http://madskristensen.net/post/WebForms-or-MVC-What-about-the-third-option.aspx - Mehrdad Afshari
有趣。我以前没见过这个。可能不常用。我甚至没想到 Repeater 和 PlaceHolder 控件在没有 runat server 标签的情况下也能工作!活到老学到老... - stepanian
@Ralph:实际上,ASP.NET MVC使用的默认视图引擎只是ASP.NET Web Forms。它无法使用需要视图状态的控件,但您可以在ASP.NET MVC中使用像“Repeater”这样的控件。 - Mehrdad Afshari
顺便说一下,Repeater 在没有 runat=server 属性的情况下无法工作,这是可以接受的。关键是它不需要放置在服务器表单内。 - Mehrdad Afshari

0

或者您可以使用ASP.NET MVC。它不使用_VIEWSTATE。


1
ASP.NET MVC在这方面并没有什么特别之处。它只是不使用<form runat="server">而已。如果你添加了这个(其实是有点愚蠢的),那么你也会在那里得到一个__VIEWSTATE字段。 - Mehrdad Afshari
MVC 是一种完全不同的(在我看来非常酷!)做事方式,它不依赖于 Web 表单,因此不需要 <form runat="server">。 - stepanian
我认为ASP.NET MVC与这个问题非常相关,因为它是为传统的HTML/HTTP表单设计的,而不使用视图/控件状态。 - Richard Szalay
没有人强迫你在Web Forms中使用<form runat="server">。在MVC出现之前,我已经这样做了多年。 - Mehrdad Afshari

0
在ASP.NET 2.0中,__VIEWSTATE保存了视图状态(View State)控件状态(Control State),主要区别在于控件可以在多个postback请求中正常工作而不需要视图状态(View State),但是不能没有控件状态(Control State)
唯一的解决方案是,如Mehrdad和Ralph所提到的,删除<form runat="server">(使其成为HTML表单)或使用ASP.NET MVC。两者都不涉及使用服务器端表单,但ASP.NET MVC是为了不使用任何服务器端控件而创建的。
有关视图/控件状态的更多信息,请参见ASP.NET状态管理概述

0
请参阅此答案。但是,如果您不想要视图状态(ViewState),远远最好的方法是使用MVC。

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