Как передать дополнительный параметр в CascadingDropDown ServiceMethod?

У меня два связанных CascadingDropDowns. Оба работают нормально. Дело в том, что в базовых веб-методах, которые предоставляют значения для DropDwonList, мне нужно прочитать один дополнительный параметр. Этот параметр необходим для настройки элемента по умолчанию для выпадающего списка.

Я не знаю, как передать этот параметр или прочитать его. Я читал в Интернете о свойстве ContextKey. Но я не знаю, как получить к нему доступ из WebMethod.

Я пытался добраться до сеанса через HttpContext.Current.Session (надеясь, что смогу извлечь какой-то параметр из сеанса), но похоже, что сеанс отличается для WebPage и WebMethod.

Итак, я потерялся здесь, есть идеи?


person Wodzu    schedule 01.10.2010    source источник


Ответы (3)


Вам нужны три вещи, чтобы заставить ContextKey работать.

  1. Задайте для свойства UseContextKey в CascadingDropDown значение true.
  2. Измените подпись метода вашего веб-метода, чтобы принять параметр contextKey:

public CascadingDropDownNameValue[] GetDropDownContents( string knownCategoryValues, string category, string contextKey) { ... }

ПРИМЕЧАНИЕ. Параметр должен указываться точно в регистре.

  1. Установите ContextKey с помощью JavaScript. AJAX CascadingDropDown предоставляет геттер/сеттер для этого свойства в DOM:

    document.getElementById('idOfCDDL').set_contextKey('valueyouwant');

ХТН.

person RPM1984    schedule 01.10.2010
comment
Спасибо, так что есть надежда для меня! Но я слишком неопытен, чтобы понять одну вещь. Как через JavaScript я могу получить, например, источник данных, чтобы передать значение из источника данных в set_contextKey('value_from_datasource_row'). И где и когда на веб-странице я должен запустить метод document.getElemntById? - person Wodzu; 01.10.2010
comment
Это зависит от того, что вы хотите установить в качестве ключа контекста - ваш вопрос говорит об элементе по умолчанию. Не знаю, что это такое, но я предполагаю, что это что-то статичное, что вызывает вопрос, зачем вам вообще это нужно пропускать. Однако в качестве отправной точки вы можете присоединить обработчик событий javascript на стороне клиента selectedIndexChanged к DDL и установить там contextkey. - person RPM1984; 02.10.2010
comment
когда вы говорите источник данных, вы имеете в виду DDL? Помните, что JavaScript полностью на стороне клиента, здесь нет источника данных, только HTML, поэтому в случае с DDL будут варианты. Поэтому вам нужно установить contextkey на выбранный индекс DDL, когда они делают выбор. - person RPM1984; 02.10.2010
comment
Спасибо за интерес :) Постараюсь быть более конкретным. Просто забудьте о предмете по умолчанию. Предположим, что я хочу передать методу дополнительный параметр:) Под DataSource я имел в виду объект DataSource, который предоставляется инфраструктурой ASP:) — вы можете подключить к нему GridView и отобразить некоторые данные. Теперь мой вопрос: когда страница отображается, выпадающие списки автоматически заполняются AJAX без какого-либо взаимодействия с пользователем. Как передать в то время значение в качестве contextKey, я хочу взять это значение из одной из строк сгенерированного источника данных. Теперь ты понимаешь? - person Wodzu; 02.10.2010
comment
Похоже, вы хотите передать contextkey веб-методу для ПЕРВОГО CDDL (то есть того, который выполняется автоматически при отображении страницы). Если это так, почему бы вам не установить contextKey на стороне сервера (например, на Page_PreRender)? Вы бы установили его на стороне клиента с помощью JavaScript, когда хотите изменить этот contextKey на основе выбора пользователя, но если это автоматический вызов из AJAX, просто установите его на стороне сервера (ajaxCDDL.ContextKey = foo) - person RPM1984; 03.10.2010
comment
Да, я вчера пришел на эту сотрясение. Спасибо за помощь :) - person Wodzu; 03.10.2010
comment
:) Нет проблем, рад, что вы разобрались. - person RPM1984; 04.10.2010

Передача дополнительных аргументов Иногда методу действия, который предоставляет JSON для поля со списком, могут потребоваться дополнительные аргументы. Вот как передать их вашему действию: CopyПередача дополнительных аргументов в метод действия

function onComboBoxDataBinding(e) {
    e.data = $.extend({}, e.data, { customParam: "customValue"});
}
person 130nk3r5    schedule 11.10.2012

В вашем .cs файле напишите:

cascadingdropdown1.contextKey=<parameter you need>

Затем в веб-методе используйте этот contextKey

person Alex    schedule 26.03.2012