Подтвердить что ты не робот

Параметры добавлены в <select> по javascript, потерянному в обратной передаче

Я добавил некоторые опции в элемент select с помощью javascript на стороне клиента и не могу получить его в обратной передаче.

Что мне делать?

Код, используемый для добавления параметров:

<asp:DropDownList ID="ddlProduct" runat="server"></asp:DropDownList>

var ddlProduct = "#"+"<%= ddlProduct.ClientID %>";

$(ddlProduct).append($("<option></option>").html(product_name)
4b9b3361

Ответ 1

Параметры, добавленные в раскрывающийся список с использованием JavaScript, НЕ ДОЛЖНЫ выйти на серверную сторону, не говоря уже о сохранении во время обратной передачи. Параметры сохраняются в ViewState. Вы изменяете раскрывающийся список, используя DOM на стороне клиента, но как насчет ViewState? Вы не изменяете его, поэтому ASP.NET не будет знать, что все изменения были внесены в раскрывающийся список, когда он перезагружает состояние выпадающего списка из ViewState.

Возможное обходное решение

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

Вы можете сохранить элементы в форматированной строке JSON и проанализировать эту строку с помощью .NET Framework DataContractJsonSerializer Class (если вы используете .NET Framework >= 3.5) на стороне сервера. Если вы не используете .NET Framework 3.5, вы можете использовать разделителей, например - text1,text2|value1,value2

Ответ 2

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

Элементы управления сервером в ASP.NET используют viewstate для хранения объектов ListItem, которые формируют теги option в теге select. В представлении обычно отправляется отдельное скрытое поле, чтобы оно возвращалось на сервер при отправке формы.

Вы можете использовать подобный метод для добавляемых опций, помещая их также в скрытое поле, которое затем вы можете обрабатывать в код сервера для создания объектов ListItem для элементов, помещаемых в элемент управления DropDown.