gpt4 book ai didi

c# - 为什么标签的值(value)改变了?

转载 作者:太空狗 更新时间:2023-10-29 23:49:46 26 4
gpt4 key购买 nike

我知道即使 TextBox 禁用了 ViewState,我们也不会丢失数据,因为它实现了 IPostBackDataHandler 接口(interface)。

<asp:TextBox ID="TextBox1" runat="server" EnableViewState="False"/>

但我的问题是为什么标签也会出现这种情况?由于标签未实现 IPostBackDataHandler 接口(interface),为什么即使 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.";
}

我希望在单击按钮后在标签中看到“点击前”,但在单击按钮后我在标签中看到“已更改”文本。

最佳答案

好的,我删除了我之前的回答,我会试着用一个例子来重新陈述它。

首先,正如其他人所说,ViewState 的想法是在回发之间保持状态,而不是在单个页面加载周期内保持状态,因此您看到的是预期的行为。

要通过示例查看不同之处,请尝试添加带有 2 个按钮的标签:

 <asp:Label ID="Label1" runat="server" EnableViewState="False" Text="Before click"></asp:Label>  
<asp:Button ID="btn1" Text="Click" OnClick="btn1_Click" runat="server" />
<asp:Button ID="btnReset" Text="Reset" OnClick="btnReset_Click" runat="server" />

其中 btn1 将值设置为“已更改”,而 btnReset 有一个空处理程序。

现在 EnableViewState 设置为 False,如果您点击 btn1 页面会重新加载,btn1_Click 会被执行, 并且页面以标签值 = "Changed"呈现,如果您单击 btnReset 页面将再次重新加载,但由于 View 状态被禁用,标签将恢复为原始文本 "Before click "

如果在标签上将 EnableViewState 设置为 True 并点击 btn1 然后点击 btnReset,标签值将保持“已更改”状态,因为状态在回发期间保持不变

希望能澄清一些事情

关于c# - 为什么标签的值(value)改变了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40526716/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com