2016-10-26 2 views
0

У меня есть 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 не имеют значений в это время
+0

Нет, серверная сторона всегда будет выполняться первой. Я бы предложил сохранить выбор в ' ', таким образом вы можете получить/использовать выбранные элементы в коде, не дожидаясь javascript. – Santi

+0

Просто попробовал, hdnParameters не имеет значения во время page_init. –

+0

Это '' asp: Hiddenfield> 'с' runat = "server" '? Я предложил скрытое поле, потому что это элемент управления ASP.Net, который сохраняет свою ценность во время обратной передачи. – Santi

ответ

0

Получил это! Для того, чтобы получить значение скрытого поля во время Page_Init я использовал:

parameterSelection = Request.Form("ctl00$contentPlaceholder$hdnParameters").ToString.Split(",").ToList 

По некоторым причинам, несмотря на использование ClientIDMode = «Static», элемент управления имеет нестатический идентификатор при запросе его из формы (статические идентификаторы назначенный позже в жизненном цикле страницы?)

Это сработало - нашел правильный идентификатор при просмотре через Request.Form в режиме отладки.

Спасибо за ваши предложения Santi

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

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