我知道这是一个常见的问题,我已经环顾四周并尝试了很多东西,但我似乎无法让它正常工作。
我有一个下拉列表,按升序列出其元素,我添加了一个复选框,可以反转下拉列表的顺序。
我正在尝试向下拉列表控件添加一个属性,类似于:
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。
我不确定为什么我的程序有以下行为:
加载页面:升序,CheckBox取消选中
选中复选框:仍然升序,检查复选框
取消选中复选框:降序,CheckBox未选中
选中复选框:升序,CheckBox已选中
...重复。
这些集只由复选框的事件处理程序调用,只在排序下拉列表时调用get。我误解了什么,我不明白为什么这样做不会起作用,除非我误解了ViewState如何正常工作。
我认为它与第一个事件句柄如何触发属性为true有关,但ViewState尚未设置,因此它不会记住任何内容。
答案 0 :(得分:0)
我发现了我做错了什么。
我试图在Page_Load中使用/重做我的下拉列表,但是我应该切换true / false的属性尚未修改,因为在单击复选框的情况下这样做了。
我将执行排序/显示下拉列表顺序的功能移动到复选框事件,现在它按预期工作。