Как узнать, изменил ли пользователь выпадающий список? - PullRequest
1 голос
/ 15 февраля 2012

У меня есть DropDownList, и мой метод его заполнения работает следующим образом:

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

ddlStaff находится в UpdatePanel, и есть еще один DropDownList, для которого SelectedIndexChanged является AsyncPostBackTrigger дляUpdatePanel.Событие изменяет область действия, заполняет список staff, затем снова запускает приведенное выше.

Все работает нормально, как есть, но я хотел бы знать, изменил ли пользователь ddlStaff, чтобы яв основном может сделать что-то вроде { Selected = (x == (UserSelectedStaff ?? DefaultStaff)) }.Есть ли встроенный способ сделать это?Или мне просто нужно вспомнить, каким был последний отобранный штат, который я отправил (в сеансе или в состоянии просмотра), а затем сравнить его с фактическим выбранным персоналом, когда он вернется?

Изменить, чтобы уточнить : Я намерен отправить ddlStaff, заполненный персоналом и уже выбранным сотрудником по умолчанию.Если пользователь выбирает сотрудника, а затем изменяет раскрывающийся список области более высокого уровня, я бы хотел, чтобы ответная копия не перезаписывала выбранного сотрудником сотрудника (если, конечно, этот сотрудник не существует в новой области).Однако если пользователь не изменил штатного сотрудника, мне следует перезаписать его значением по умолчанию для новой области.

Ответы [ 2 ]

1 голос
/ 15 февраля 2012

сделайте ваш выпадающий список "autopostback = True", и в вашей странице загрузите Event check

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

    }
1 голос
/ 15 февраля 2012

Как только ответ отправлен клиенту, на сервере нет состояния, поэтому я считаю, что вы действительно не можете сделать (x == UserSelectedStaff);в вашем сценарии с панелями обновлений я не вижу другого пути, кроме какого-либо механизма состояний, вероятно, ViewState основан на том, что объект DefaultStaff довольно легкий.

...