c# - 回发后 ViewState 变量重置

标签 c# asp.net postback viewstate page-lifecycle

这个问题我见过很多次,通常是因为 ViewState 变量在页面生命周期中过早被评估,或者 EnableViewState 是 false,但是我已经检查了这两个,它们都符合我的预期。

我的代码:

public Int32 MyNumber
{
    get
    {
        if (ViewState["MyNumber"] != null)
        {
            return (Int32)ViewState["MyNumber"];
        }

        return 0;
    }
    set
    {
        ViewState["MyNumber"] = value;
    }
}

protected override void OnLoad(EventArgs e)
{
    base.OnLoad(e);

    if (!this.IsPostBack)
    {
        MyNumber = 23;
    }
}

protected override void OnPreRender(EventArgs e)
{
    base.OnPreRender(e);

    var numberValue = MyNumber;
}

首次调用 OnPreRender 时,numberValue 为 23。此后的每次后续调用都为 0。每次有回发时,它似乎都被重置了。

问题

如何让值在回发后保持不变?

我尝试过的

将值赋值置于回发检查之外,但这首先违背了使用 ViewState 的目的。

最佳答案

我不知道还有一个 ViewStateMode 如果设置为 Disabled 会导致此行为,它是(在母版页上)。

我现在已在我的控件上将其设置为 Enabled,并且我的 ViewState 值如我希望的那样保持不变。

关于c# - 回发后 ViewState 变量重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20617586/

相关文章:

c# - Entity Framework 创建名称错误的数据库

javascript - 什么时候回发不是回发? (根据 ASP.net)

c# - 将许多元素渲染到 DrawingVisual

c# - 如何将位图转换为内存流?

c# - 如何将文本框绑定(bind)到 XML 文件(带命名空间)

asp.net - 将 configSource 与 NWebsec 结合使用

c# - 如何将 dropDownlist 映射到 C# 中的枚举?

javascript - 防止回发 - jquery/javascript

c# - 如何在 ASP.NET 上设置 treeview 的子节点回发为 false?

c# - 在 WPF/C# 中,如何检查中心按钮是否被单击或释放?