2009-01-06 2 views
7

У меня есть два элемента управления выпадающим списком ASP.NET на странице. Первый обращается к серверу и получает массив, который возвращается клиенту и используется для заполнения второго раскрывающегося списка с помощью javascript. Однако, если я сделаю выбор во втором (и вновь заполненном) выпадающем списке, а затем сделаю обратную передачу, выбор и содержимое второго раскрывающегося списка будут потеряны. Это проблема, так как мне нужно получить выбранное значение и сохранить содержимое списка, сохраненного после обратной передачи.ASP.NET - проигрывание списка dropdownlist, заполненного через javascript

Как исправить это? Я предполагаю, что это вопрос обновления viewstate в какой-то момент до обратной передачи?

Элементы управления, которые я заполняю, являются dropdownlists ASP.NET. Вот javascript, который я использую, чтобы заполнить их.

код используется следующим образом (немного сократить для краткости):

управления ASP.NET Я заселение:

< жерех: DropDownList ID = "ddlStateCounty" Runat = "сервер "OnSelectedIndexChanged =" ddlStateCounty_OnSelectedIndexChanged»AutoPostBack = "истинный"/ >

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

public void RaiseCallbackEvent(string eventArgument) 
    { 
    return "1, 2, 3"; 
} 

Javascript код Население:

function ReceiveServerData(retValue) 
{ 
    var statesArray = retValue.split(','); 
    var statesList = document.getElementById('{0}'); 

    if (statesArray.length > 0 && statesList != null) 
     { 
       for (var j = 0; j < statesArray.length; j++) 
      { 
        var newOption = document.createElement('OPTION'); 
         statesList.options.add(newOption); 
      newOption.value = statesArray[j].toString().trim(); 
        newOption.innerText = statesArray[j]; 
       } 
    } 
} 
+0

Можете ли вы добавить свою страницу aspx, код javascript и codebehind (в 3 отдельных блоках кода было бы хорошо) :) –

ответ

1

Я предполагаю, что "вы не делать вещи asp.net путь".

Похоже, что если ваши модификации javascript не являются родными asp.net, то элементы, которые вы заполняете, не являются элементами управления asp.net, поэтому вы теряете их в обратной передаче. asp.net действительно требует жесткой привязки между своей моделью и фактической страницей.

Может быть, так далеко от базы - помогло бы, если бы вы могли опубликовать код. (, ИС и метод отделенного кода)

редактировать для новой информации:

Право - так что вы в основном создавая нагрузку совершенно нормальных HTML элементов через JS одна на основе AJAXified строки возврата (?) , который у asp.net codebehind имеет никакой концепции вообще. Я не уверен на 100%, это проблема без настройки тестового приложения, но это звучит правильно.

Осмотр запроса. Формы тогда, как предложили другие, - это самый простой способ исправить это прямо сейчас, но вы должны иметь в виду, что asp.net становится все более и более болезненным, чем дальше вы отклоняетесь от дел как он хочет вас. Я думаю, было бы целесообразно разработать, как добавить эти новые параметры из кода.

+0

это слишком много экземпляров «asp.net» в одном сообщении – annakata

+0

слишком много asp.net ?? это возможно? ;) – Blounty

+0

asp.net считается вредным? : P – annakata

1

просто используйте коллекцию response.forms, чтобы получить выбранное значение.

+0

Спасибо! Однако мне также нужно уметь сохранять значения выпадающего списка между сообщениями. – Peanut

6

Вы правы, указав, что у вас нет права ViewState, поэтому значения не заполняются, когда вы отправляете данные обратно на сервер.

Я сильно рекомендуется перенести на использование Cascading Drop Down в ASP.NET AJAX Control Toolkit (он имеет и .NET 2.0 и .NET 3.5 релизов), так как он делает то, что вы после этого, и это делает поддерживать через обратную передачу.

Ваш другой вариант должен состоять из onchange события в раскрывающемся списке с заполненным JavaScript выпадающим списком, в котором вы затем заполняете скрытое поле, так как оно будет отправлено обратно на сервер, а значение submit будет поддерживаться в пределах Опубликованные данные, что-то вроде:

$addHandler('change', $get('dynamicDDL'), function() { $get('hiddenField').value = this.options[this.selectedIndex].value; }); 

для демонстрации я использовал MS AJAX стенография для добавления событий и т.д. Более подробная информация о методах, которые я использовал, можно найти здесь: http://msdn.microsoft.com/en-au/library/bb397536.aspx

3

Request.Form [Control.UniqueID] дает вам выбор значение.

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

  • Нет связанных вопросов^_^