如何判断用户是否更改了下拉列表

时间:2012-02-14 23:03:39

标签: c# asp.net drop-down-menu postback viewstate

我有一个DropDownList,我的填充方法如下:

ddlStaff.Items.Clear();
ddlStaff.Items.AddRange(staff.Select(x => new ListItem(x.Name, x.Id.ToString())
  { Selected = (x == DefaultStaff) }).ToArray());

ddlStaff位于UpdatePanel,另有DropDownList SelectedIndexChangedUpdatePanel的AsyncPostBackTrigger。该事件会更改范围,重新填充staff列表,然后再次运行上面的内容。

一切正常,但我想做的是知道用户是否更改了ddlStaff以便我基本上可以执行{ Selected = (x == (UserSelectedStaff ?? DefaultStaff)) }之类的操作。有没有内置的方法来做到这一点?或者我只需要记住我发送的最后一个选定的工作人员(在会话或查看状态中),然后将它与实际选定的工作人员进行比较?

编辑以澄清:我的意图是我可以发送填充了员工的ddlStaff,并且已经选择了默认的员工。如果用户选择了一名员工,然后更改了更高级别的范围下拉列表,我希望回发不会覆盖用户选择的员工(当然,除非员工在新范围内不存在) )。但是,如果用户没有更改人员,我应该用新范围的默认值覆盖它。

2 个答案:

答案 0 :(得分:1)

一旦响应被发送到客户端,服务器上就没有状态,所以我相信你真的不能做(x == UserSelectedStaff);在你的使用更新面板的场景中,除了一些状态机制之外没有别的办法,ViewState可能基于DefaultStaff对象相当轻量级。

答案 1 :(得分:1)

使您的下拉列表“autopostback = True”,并在您的页面中加载事件检查

if (!IsPostBack)
    {
      //now you know user made a change

    }