Данная статья рассказывает, каким образом можно связывать такие web-контролы редактирования мастеров как MasterEditorAjaxLookUp и MasterEditorAjaxDropDown.

Методы для MasterEditorAjaxLookUp

Создание зависимых лукапов внутри AGE

Если лукапы находятся внутри AGE, то для этого нужно воспользоваться следующим способом.

Работа с LookUp’ом из javascript

Подписка на изменение значения в LookUp’e

$('#<%=ctrlМойЛукап.ClientID%>').on('change', function () {
  // alert('Значение изменилось');
});

Либо можно задать клиентский обработчик изменения в серверном коде:

    lookup.ChangeClientHandler = "alert('Значение изменилось в лукапе с идентификатором {0}');";

Связывание при помощи серверных методов, которые предусмотрены технологией

Для конкретного контрола редактирования мастера (MasterEditorAjaxLookUp или MasterEditorAjaxDropDown) имеется возможность указать его мастеровой контрол (MasterEditorAjaxLookUp или MasterEditorAjaxDropDown), т.е. тот, от которого он зависит. При смене мастерового контрола вызовется серверный обработчик для изменения свойств зависимого контрола.

// Это нужно писать только тогда, когда все свойства у контролов проставлены WebBinder (тип и пр.)
ctrlSlave.AddMasterLookup(ctrlMaster, MasterOfSlaveChanged);

MasterOfSlaveChanged - это делегат вида:

/// <summary>
/// Делегат обработки смены значения в AJAX-лукапе
/// </summary>
/// <param name="masterSelectedPk">Текущее значение мастерового лукапа</param>
/// <param name="selectedPk">Текущее значение зависимого лукапа</param>
/// <param name="masterLookups">Список остальных мастеровых лукапов</param>
public delegate void AjaxLookUpChangeHandler(
    string masterSelectedPk,
    ref string selectedPk,
    List<MasterLookup> masterLookups);

Например, если нужно очистить зависимый контрол, если очистился мастеровой:

private void MasterOfSlaveChanged(string masterselectedpk, ref string selectedpk, List<MasterLookup> masterLookups)
{
    if (string.IsNullOrEmpty(masterselectedpk))
    {
        selectedpk = string.Empty;
    }
}

Также, можно изменять LimitFunction и пр.

В такой обработчик приходит значение мастерового контрола - masterselectedpk и значение зависимого контрола - selectedPk (передается по ссылке). (Т.е. если будет изменён selectedpk, то в javascript методе проставится значение и пойдет еще один AJAX-запрос на зачитку объекта по selectedpk).

Например:

ctrl1.AddMasterLookup(ctrl2, ctrl1Ofctrl2Changed);
ctrl2.AddMasterLookup(ctrl1, ctrl2Ofctrl1Changed);

НО: Мастеровой MasterEditorAjaxDropDown не может быть зависимым контролом своего зависимого контрола типа MasterEditorAjaxDropDown.