2010-03-16 2 views
4

Я разрабатываю веб-приложение ASP.NET, которое включает в себя карты Google. У меня есть список ASP.NET на моей странице, который содержит список элементов. Когда пользователь выбирает один из элементов, я хотел бы показать этот элемент на карте. Основная сложность заключается в том, что на картах google используется javascript для управления им, а listbox - это серверный элемент управления.Использование Javascript для обнаружения, когда пользователь выбрал элемент в списке ASP.NET

Я могу придумать два способа сделать это. Первый будет включать в себя список, вызывающий функцию javascript, когда пользователь выбирает новый элемент. Затем я могу записать эту функцию для выполнения необходимых операций с картами. К сожалению, свойство OnSelectedIndexChanged в списке не поддерживает функции javascript.

Вторая включает в себя обертывание UpdatePanel вокруг списка и получение списка для выполнения обратной передачи. В событии SelectedIndexChanged в VB/C# мне нужно как-то сделать вызов функции javascript, которая затем обновит карту.

Какое решение я могу использовать?

Благодаря

--Amr

ответ

3

В вашем коде (в вашем PageLoad) просто добавить яваскрипт обработчика атрибута OnChange, который указует на ваш яваскрипт функции. Например:

lbYourListBox.Attributes.Add("onChange", "UpdateYourMap();"); 

Вы также можете добавить это к вашему контролю с помощью инлайн Javascript, как хорошо, но я предпочитаю делать это в коде, так что структура может обрабатывать совмещая имена.

2

Вы можете просто вставить JavaScript в вашу страницу, avoidig опираясь на ASP с ним. Поместите код в тело документа:

<script language="javascript"> 
body.onload=function(){ 
    var lb=document.getElementById("yourlistboxid"); 
    lb.onChange = function(){ 
     // put your handling code here 
    } 
} 
</script> 
1

демо другой подход, вот грубый гид:

void listbox_SelectedIndexChanged(...) { 

    string js = string.Format("callToMapsFunction({0});", listbox.SelectedValue); 
    string scriptKey = "mapscript"; 

    ScriptManager.RegisterStartupScript(listbox, typeof(ListBox), scriptKey 
     , js, true); 
} 

RegisterStartupScript работает независимо Javascript вы даете ему после частичной обратной передачи завершается. вам необязательно передавать значение списка - только любые данные, которые вы хотите предоставить картам api. первые 3 элемента предназначены для того, чтобы предотвратить регистрацию скрипта несколько раз (насколько я знаю). true в конце говорит scriptmanager автоматически добавлять открывающие и закрывающие теги вокруг вашего js-кода.

+0

Спасибо за образец кода. Старался выяснить, как это сделать какое-то время. Я буду смотреть дальше в RegisterStartupScript –

Смежные вопросы