Выбор элемента управления из JavaScript возвращает пустое значение - PullRequest
3 голосов
/ 01 июля 2011

В моих приложениях ASP.NET у меня есть серверный элемент управления HTML.

<select id="CompanyDropDown" runat="server" style="width:330px">
</select>

Затем на моей странице есть ссылка, которая запускает функцию JavaScript, которая заполняет этот элемент управления, а также выбирает «текущий» элемент. Я вижу, что это работает, потому что в списке есть все элементы и выбран правильный.

Однако, когда страница возвращается в ответ на нажатие кнопки.

<asp:Button runat="server" ID="btnSaveCompany" Text="Save" 
    onclick="btnSaveCompany_Click" />

CompanyDropDown.Value пусто и не содержит элементов. Любые предложения о том, как я могу увидеть выбранное значение при обратной передаче?

(Примечание. Я пытался использовать элемент управления ASP.NET DropDown, но он не проходит проверку после обратной передачи, когда элемент управления имеет элементы, которые были добавлены после отображения страницы.)

Ответы [ 3 ]

2 голосов
/ 01 июля 2011

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

jQuery script:

$('#CompanyDropDown').change(function() {
    $('#inpSelectValue').val($(this).val());
});

Разметка скрытого поля :

<input runat="server" id="inpSelectValue" clientidmode="static" type="hidden" />

Значение скрытого поля будет перенесено на сервер при обратной пересылке.Обратитесь к нему, чтобы получить значение выбранного элемента.Не забудьте добавить clientidmode="static" к вашему раскрывающемуся списку, чтобы в качестве обработанного идентификатора ваших элементов управления было установлено значение, назначенное на странице ASPX (т. Е. CompanyDropDown вместо parentContainer_CompanyDropDown):

<select id="CompanyDropDown" runat="server" style="width:330px"
    clientidmode="static" />

Кроме того, вы можете использовать AJAX, чтобы сообщить серверу, что вы добавляете каждый динамически генерируемый элемент списка или меняете выбор.Я сделал бы это только в том случае, если вам нужно вести список предметов, в дополнение к которому выбран один из них.

1 голос
/ 01 октября 2015

Вы можете использовать Request.Form [CompanyDropDown.UniqueID]. Это будет работать без скрытого поля.

1 голос
/ 01 июля 2011

Значения, обрабатываемые в JS, не могут быть получены на стороне сервера и не могут быть сохранены при обратной передаче.Вы можете поместить SelectedValue в скрытое поле.При обратной передаче страницы необходимо снова установить SelectedValue, который вы сохраняете в скрытом поле.

...