【发布时间】: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