gpt4 book ai didi

c# - ListBox 实现了 IPostBackDataHandler,但当 EnableViewState 设置为 false 时,为什么它不能像 TextBox 一样保持其状态?

转载 作者:太空宇宙 更新时间:2023-11-03 23:24:04 25 4
gpt4 key购买 nike

在这篇文章中,Understanding ASP.NET View State ,作者是这样说的:

It is a common misconception among developers that view state is somehow responsible for having TextBoxes, CheckBoxes, DropDownLists, and other Web controls remember their values across postback. This is not the case, as the values are identified via posted back form field values, and assigned in the LoadPostData() method for those controls that implement IPostBackDataHandler.

因此,当我禁用 TextBox 的 View 状态时,它仍然会在回传中保留其文本值,根据上面的描述,这是正确的。

但是,当我禁用同样实现 IPostBackDataHandler 的 ListBox 的 View 状态时,它不会在回发中保留其状态。例如,下面提供的代码本应在单击按钮(在同一网络表单中)时添加重复项目(使用空事件处理程序),但事实并非如此。

我是不是漏掉了什么?

protected void Page_Load(object sender, EventArgs e)
{
lbox.Items.Add("1");
lbox.Items.Add("2");
lbox.Items.Add("3");
}

最佳答案

我想可以从下图找到答案。 (并经过测试)

正如您在第 1 步中注意到的那样,lblMessage.Text 中的值为“Hello World!”,没有任何内容用于 Raise PostBack Event Stage,因此该值保持原样。

<asp:Label runat="server" ID="lblMessage" 
Font-Name="Verdana" Text="Hello, World!"></asp:Label>
<br />
<asp:Button runat="server"
Text="Change Message" ID="btnSubmit"></asp:Button>
<br />
<asp:Button runat="server" Text="Empty Postback"></asp:Button>

And the code-behind class contains the following event handler for the Button's Click event:

private void btnSubmit_Click(object sender, EventArgs e)
{
lblMessage.Text = "Goodbye, Everyone!";
}

接下来,对于文本框,即使您禁用特定控件/整个页面的 View 状态,保存的是 PostBack 事件,这就是为什么如果您查看第 3 步, previous PostBack 作为 Load View State Stage 的一部分加载,这使得“Hello World!”已被实例化、覆盖。

BTW 的解释仅适用于不使用 DataSource 的控件事件,其他需要 DataSource 的控件似乎在文档中隐式定义。

enter image description here

关于c# - ListBox 实现了 IPostBackDataHandler,但当 EnableViewState 设置为 false 时,为什么它不能像 TextBox 一样保持其状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34376110/

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