Параметры добавлены в <select> по javascript, потерянному в обратной передаче
Я добавил некоторые опции в элемент select с помощью javascript на стороне клиента и не могу получить его в обратной передаче.
Что мне делать?
Код, используемый для добавления параметров:
<asp:DropDownList ID="ddlProduct" runat="server"></asp:DropDownList>
var ddlProduct = "#"+"<%= ddlProduct.ClientID %>";
$(ddlProduct).append($("<option></option>").html(product_name)
Ответы
Ответ 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
.