使用ViewState通过回发维护属性状态

本文关键字:维护 属性 状态 ViewState 使用 | 更新日期: 2023-09-27 18:28:13

我知道这是一个常见的问题,我环顾四周,尝试了很多方法,但似乎无法正常工作。

我有一个下拉列表,按升序列出了它的元素,我添加了一个复选框,应该颠倒下拉列表的顺序。

我正试图将一个属性添加到下拉列表控件中,大致如下:

    public bool isReverse = false;
    public bool reverse
    {
        get
        {
            return ViewState["isReverse"] != null ? (bool)ViewState["isReverse"] : false;
            //return ViewState["isReverse"] != null ? (bool)ViewState["isReverse"] : isReverse;
//I have also tried returning isReverse, but its the same behaviour
        }
        set
        {
            ViewState["isReverse"] = value;
            isReverse = value;
        }
    } 

那里可能有多余的代码。我的复选框有一个执行以下操作的事件处理程序:

    protected void isReverse_CheckedChanged(object sender, EventArgs e)
    {
        CheckBox myBox = (CheckBox)sender;
        SortableCustomDropDownLIst myList = sddl;
        if (myBox.Checked)
        {
            myList.reverse = true;
        }
        else
        {
            myList.reverse = false;
        }
    }

我最初的解决方案不是使用ViewState,所以每次我们回发时,它都会重置回false,而且它永远不会以相反的顺序列出。我的代码检查这个属性,并确定它是否需要反转负责提供下拉列表的ArrayList。

我不确定为什么我的程序有以下行为:

加载页面:升序,复选框未选中

复选框:仍然升序,复选框选中

取消选中复选框:降序,复选框未选中

复选框:升序,复选框选中

重复

这些集合仅由复选框的事件处理程序调用,get仅在对下拉列表进行排序时调用。我是不是误解了什么,我不明白为什么这不起作用,除非我误解了ViewState是如何正常工作的。

我认为这与第一个事件句柄如何将属性触发为true有关,但ViewState尚未设置,因此它不记得任何内容。

使用ViewState通过回发维护属性状态

我发现自己做错了什么。

我试图在Page_Load中使用/重做我的下拉列表,但我应该切换true/false的属性尚未修改,因为在单击复选框的情况下会这样做。

我将对下拉列表的顺序进行排序/显示的功能移到了复选框事件中,现在它可以按预期工作了。