让你的展示页面没有viewstate的困扰

让我们看看什么时候服务端控件需要包含在<form id="Form1" method="post" runat="server"><input type="hidden" name="__VIEWSTATE" value="dDwtMTc3M" /></form>中,其中<input type="hidden" name="__VIEWSTATE" value="dDwtMTc3M" />保存的是服务端ViewState的序列数值。如果控件实现 IPostBackEventHandler 或者 IPostBackDataHandler 接口,则必须放在<form id="Form1" method="post" runat="server">,因为要进行回发事件处理或者回发数据处理,看到这里,也许你会问,这是为什么?好,继续往下看
在这里以TextBox来举例,
public class TextBox : WebControl, IPostBackDataHandler, IEditableTextControl, ITextControl
{
}
TextBox继承了接口IPostBackDataHandler,在加载回传数据,先跟有ViewState加载过来的数据比较,以此来决定是否要为该
控件触发TextChanged事件,所以TextBox在Render方法中会调用Page.VerifyRenderingInServerForm(this);来验证控件是否在<form id="Form1" method="post" runat="server">元素中,不存在就会抛出异常。那么<form id="Form1" method="post" runat="server"><input type="hidden" name="__VIEWSTATE" value="dDwtMTc3M" /></form>是怎么输出来的呢?
是HtmlForm.RenderChildren方法调用Page.BeginFormRender 和Page.EndFormRender
这两个方法用来给<form>的开始和结束位置,Render所有Register的Hidden Fields,同时也Render用来保存ViewState的
Hidden Field。
到这里,我们对整个过程都有个基本的了解,那么当我们在做网站的时候,如果网站只是用来显示给用户看,这时候界面的交互
功能不是很大的话,我们完全可以把viewstate去掉,交互功能让ajax去实现。
当然如果是办公网站的话有的就不是很适合了。
如果你只是把DOCUMENT的属性enableViewState设置成为Flase的话,还会存在<form id="Form1" method="post" runat="server"><input type="hidden" name="__VIEWSTATE" value="dDwtMTc3M" /></form>但是如果我们把aspx页面的<form id="Form1" method="post" runat="server"></form>去掉的话<input type="hidden" name="__VIEWSTATE"
value="dDwtMTc3M" />就没有了。
这样做有利有弊,看你怎么衡量了。
利:少了上面的很多字符。
弊:有几个web控件用不了。
看看我做的例子吧
/Files/hongzhenhua/viewstateTest.rar
是不是没有<input type="hidden" name="__VIEWSTATE" value="dDwtMTc3M" />出现呢?

你可能感兴趣的:(view)