У меня есть select2.js multi select. Выбранные значения в этом мультивыборном вызове будут создавать другие элементы управления после обратной передачи. Select2.js не предназначен, чтобы сохранить его содержимое через постбэка, поэтому я добавил немного JQuery, чтобы заставить его работать:Жизненный цикл страницы - элемент управления не имеет значения на Page_Init(), Page_load() уже слишком поздно
<select id="selectParameters" multiple="true" runat="server" clientidmode ="Static" style="width:100%;" class="textBox;">
</select>
<asp:hiddenField ID="hdnParameters" runat="server" ClientIDMode="Static" />
<script type="text/javascript">
$(document).ready(function() {
$("#selectParameters").select2({
placeholder: "Select parameter(s)"
});
if ($("#hdnParameters").val != "") {
// This is not a postback - Move all currently selected items into the hidden selection
$("#hdnParameters").val($("#selectParameters").val());
} else {
// This is a postback - Use the hidden selection to populate the currently selected items
$("#selectParameters").select2("val", $("#hdnParameters").val());
}
$("#selectParameters").on("select2:select", function (e) {
// Selection was updated - Move all currently selected items into the hidden selection
$("#hdnParameters").val($("#selectParameters").val());
});
$("#selectParameters").on("select2:unselect", function (e) {
// Selection was updated - Move all currently selected items into the hidden selection
$("#hdnParameters").val($("#selectParameters").val());
});
$("#btnAllParameters").click(function(){
// Select all
$("#selectParameters > option").prop("selected", "selected");
$("#selectParameters").trigger("change");
$("#hdnParameters").val($("#selectParameters").val());
return false;
});
$("#btnNoParameters").click(function() {
// De-select all
$("#selectParameters > option").prop("selected", "");
$("#selectParameters").trigger("change");
$("#hdnParameters").val($("#selectParameters").val());
return false;
});
});
</script>
Это прекрасно работает для сохранения значения .select2 через постбэка, и select2 получает repopulated должным образом во время page_load.
В другом месте кода я использую findControl() для доступа к значениям, содержащимся в динамически созданных элементах управления (которые создаются на основе содержимого элемента управления select2). Чтобы использовать findControl(), элементы управления необходимо создать во время page_init.
Private Sub page_init() Handles Me.Init
If IsPostBack Then
Dim parameterSelection = hdnParameters.Value
' Add some controls to the page based upon the contents of parameterSelection
End If
End Sub
В приведенном выше коде параметрSelection = "", если я запускаю этот код во время page_init.
Если я запускаю идентичный код во время Page_Load, получает Выбор параметров значение, которое я ожидал, и все работает нормально (за исключением я не могу использовать FindControl() на динамически создаваемых элементов управления, так как они не были созданы во время Page_Init)
Я ищу решение, чтобы я мог получить доступ к значениям, содержащимся в динамически созданных элемента управления после обратной передачи.
- В настоящее время я загружаю ВЫБ.2 во время Page_Load, однако динамически создаваемые элементы управления не будут доступны через FindControl(), поскольку они не были созданы во время Page_Init
- я не могу создавать динамические элементы управления, основанные на значения select2 во время page_init, так как скрытое поле и select2 не имеют значений в это время
Нет, серверная сторона всегда будет выполняться первой. Я бы предложил сохранить выбор в ' ', таким образом вы можете получить/использовать выбранные элементы в коде, не дожидаясь javascript. –
Santi
Просто попробовал, hdnParameters не имеет значения во время page_init. –
Это '' asp: Hiddenfield> 'с' runat = "server" '? Я предложил скрытое поле, потому что это элемент управления ASP.Net, который сохраняет свою ценность во время обратной передачи. – Santi