我知道即使为TextBox禁用ViewState,我们也不会丢失数据,因为它实现了IPostBackDataHandler接口.
<asp:TextBox ID="TextBox1" runat="server" EnableViewState="False"/>
Run Code Online (Sandbox Code Playgroud)
但我的问题是为什么标签也会出现这种情况呢?为什么标签不会丢失它的数据,即使ViewState被禁用,因为标签没有实现IPostBackDataHandler接口?
<asp:Label ID="Label1" runat="server" EnableViewState="False" ViewStateMode="Disabled"/>
Run Code Online (Sandbox Code Playgroud)
TextBox定义:
public class TextBox : WebControl, IPostBackDataHandler,
Run Code Online (Sandbox Code Playgroud)
标签定义:
public class Label : WebControl, ITextControl
Run Code Online (Sandbox Code Playgroud)
我的代码:
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" EnableViewState="False" ViewStateMode="Disabled" Text="Before click"></asp:Label>
<asp:TextBox ID="TextBox1" runat="server" EnableViewState="False"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_OnClick"/>
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
和代码背后:
protected void Button1_OnClick(object sender, EventArgs e)
{
Label1.Text = "Changed.";
}
Run Code Online (Sandbox Code Playgroud)
我点击按钮后,我希望看到标签中的"点击之前",但在点击按钮后,我看到标签中的"已更改"文字.
小智 0
我认为您对 ViewState 是什么有错误的理解。
ViewState 中的数据存储在请求之间,但不在页面生命周期期间存储。顺便说一句 - ViewState 数据是在 SaveStateComplete 事件中的 PreRenderComplete 事件之后生成的。
https://msdn.microsoft.com/en-us/library/ms178472.aspx
如果您关闭了 ViewState - 只是认为它不会在输出中生成。
在页面生命周期期间,分配给控件(以及页面字段和属性,因为页面只是一个类)的所有数据都将按照您在 aspx 中定义的方式呈现。但之后就会丢失,除非保存在ViewState中。
| 归档时间: |
|
| 查看次数: |
478 次 |
| 最近记录: |