2016-10-26 1 views
0

select2.js 다중 선택이 있습니다. 이 다중 선택에서 선택된 값은 포스트 백 이후에 다른 컨트롤을 생성합니다. Select2.js은 다시 게시를 통해 그 내용을 유지하도록 설계, 그래서 그것을 작동하도록 JQuery와의 비트를 추가되지 않습니다 : 이것은 다시 게시를 통해 .select2의 값을 유지하는 잘 작동페이지 수명주기 - 컨트롤에 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는 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 

위 코드에서 page_init 중에이 코드를 실행하면 parameterSelection = ""입니다. 내가를 Page_Load 동안 동일한 코드를 실행하면

는 parameterSelection 내가 기대 값을 가져옵니다 및 모든 (그들은 후 Page_Init 과정에서 생성되지 않은 이후로는 동적으로 생성 된 컨트롤에의 FindControl()를 사용할 수 없습니다 제외)

을 잘 실행

포스트 백 후에 동적으로 생성 된 컨트롤에 포함 된 값에 액세스 할 수있는 솔루션을 찾고 있습니다. 그들은 후 Page_Init 동안 생성되지 않은으로

  • 현재 나는 그러나 동적으로 생성 된 컨트롤의 FindControl()를 통해 액세스 할 수 없습니다,를 Page_Load 중 선택 2로드
  • 나는에 따라 동적 컨트롤을 만들 수 없습니다 hidden_field와 select2가 그 당시의 값을 가지고 있지 않은 것처럼 page_init 동안 select2의 값
+0

아니요, 서버 쪽이 항상 먼저 실행됩니다. 선택을''에 저장하면 자바 스크립트를 기다릴 필요없이 코드 숨김에서 선택된 요소를 얻거나 사용할 수 있습니다. – Santi

+0

그냥 시도, hdnParameters page_init 중에 값이 없습니다. –

+0

'runat = "server"'가있는''입니까? 나는 숨겨진 필드를 제안했다. ASP.Net 컨트롤이 포스트 백 동안 그 값을 유지하기 때문이다. 내가 볼 수있는 지금까지 <에 HiddenField ID = "hdnParameters"RUNAT = "서버"ClientIDMode/= "정적"ASP>' 후 Page_Init hdnParameters.value = 동안 "" ': – Santi

답변

0

이 그것을 얻었다! 후 Page_Init 중에 히든 필드의 값을 검색하기 위해 I 사용 : 어떤 이유

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

폼에서 요청시, 제어가 아닌 정적 인 식별자가 clientIDMode = "정적"을 사용하더라도 (정적 식별자입니까 나중에 페이지 라이프 사이클에 할당?)

이 방법으로 해결 - 디버그 모드에서 Request.Form을 탐색하는 동안 적절한 식별자를 찾았습니다.

제안 해 주셔서 감사합니다. Santi