【问题标题】:Working with ViewState to maintain property state through postbacks使用 ViewState 通过回发维护属性状态
【发布时间】:2014-10-28 01:56:30
【问题描述】:

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

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

我正在尝试向下拉列表控件添加一个属性,类似于:

    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 尚未设置,因此它不记得任何内容。

【问题讨论】:

  • 这条线什么也没做:SortableCustomDropDownLIst myList = sddl;这就是为什么事情不正常吗?
  • @SteveWellens 是的,我会尽快删除这些东西。我不确定什么,写了很多废话。我相信处理程序正在按照我的意愿工作。与财产有关。
  • 为什么不在客户端脚本中完成呢?

标签: c# asp.net viewstate asp.net-webpages


【解决方案1】:

我发现我做错了什么。

我试图在 Page_Load 中恢复/重做我的下拉列表,但是我应该切换 true/false 的属性尚未修改,因为它是在单击复选框的情况下完成的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-25
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    相关资源
    最近更新 更多