如何判断用户改变了下拉列表

问题描述:

我有一个DropDownList,我的方法来填充它的工作原理如下:如何判断用户改变了下拉列表

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

ddlStaff处于UpdatePanel,并且还有另一个DropDownListSelectedIndexChanged对于一个AsyncPostBackTrigger UpdatePanel。事件更改范围,重新填充staff列表,然后再次运行上述内容。

一切工作正常,但我想要做的是知道用户是否已更改ddlStaff,以便我可以基本上做类似{ Selected = (x == (UserSelectedStaff ?? DefaultStaff)) }。有没有内置的方法来做到这一点?或者我只需要记住我发出的最后选定的员工是什么(在会议或视图状态下),然后在实际选定的员工回来时将其进行比较?

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

一旦响应发送到客户端,服务器上没有状态,所以我相信你真的不能做一个(x == UserSelectedStaff);在更新面板的情况下,除了一些状态机制之外,我没有看到任何其他方式,ViewState可能基于DefaultStaff对象相当轻量级。

+0

这就是我的想法。感谢您的帮助确认。 – 2012-02-15 17:52:13

让你的下拉列表“的AutoPostBack =真”,并在页面加载事件检查

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

    } 
+0

我不确定是否因为我的问题不清楚,但这看起来对我来说似乎不是正确的解决方案。这将启动一个回发来检查下拉列表是否更改。我仍然必须提出在视图状态中存储之前/当前状态的逻辑,以便我知道该怎么做。而且,它会低得多,因为它会来回发送网络流量。尤其如果下拉列表从A更改为B,然后又返回B.在这种情况下,我们已经发送了两个回传。使用Ricky.G解决方案,我只需要状态逻辑,而不需要其他任何东西。 – 2012-02-16 17:23:34