使用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尚未设置,因此它不记得任何内容。
我发现自己做错了什么。
我试图在Page_Load中使用/重做我的下拉列表,但我应该切换true/false的属性尚未修改,因为在单击复选框的情况下会这样做。
我将对下拉列表的顺序进行排序/显示的功能移到了复选框事件中,现在它可以按预期工作了。