【发布时间】:2016-11-10 11:38:32
【问题描述】:
我知道即使为 TextBox 禁用了 ViewState,我们也不会丢失数据,因为它实现了 IPostBackDataHandler 接口。
<asp:TextBox ID="TextBox1" runat="server" EnableViewState="False"/>
但我的问题是为什么标签也会发生这种情况?为什么标签没有实现IPostBackDataHandler 接口,即使禁用了 ViewState 也不会丢失数据?
<asp:Label ID="Label1" runat="server" EnableViewState="False" ViewStateMode="Disabled"/>
文本框定义:
public class TextBox : WebControl, IPostBackDataHandler,
标签定义:
public class Label : WebControl, ITextControl
我的代码:
<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>
以及后面的代码:
protected void Button1_OnClick(object sender, EventArgs e)
{
Label1.Text = "Changed.";
}
单击按钮后,我希望在标签中看到“单击前”,但单击按钮后,我在标签中看到了“已更改”文本。
【问题讨论】:
-
什么叫“数据”?标签和文本框上的文本?如果是这样,这个文本是如何在标记中设置的?
-
@Andrei 在按钮上单击我写了这个 TextBox1.Text = "Changed"; Label1.Text = "已更改。";我希望标签会丢失它的数据,因为我禁用了视图状态并且它没有实现 IPostBackDataHandler。
-
好的,很清楚你所说的数据是什么意思,但不是你所说的“失败”。因此,您在单击时更改文本。现在你期待什么?页面加载并且控件具有“已更改”以外的值?或者下一次回发发生并且控制具有“已更改”以外的值?
-
@Andrei EnableViewState="False" 有什么用?不应该通过禁用它在回发后丢失更改的数据吗?很清楚为什么 EnableViewState="False" 不适用于 Textbox,但我想知道为什么它也不适用于标签?
-
标签上的文字是什么?