2010-07-16 3 views
3

내 페이지에 3 개의 updatepanels가 있는데 이벤트가 발생하면 2 개의 업데이트 패널을 업데이트하고 싶습니다. 업데이트 패널 중 하나에서 나는 ASP ReoderList를 가지고있다.두 번째 업데이트 패널을 업데이트 할 수 없습니다.

<asp:UpdatePanel ID="upMain" UpdateMode="Conditional" runat="server" style="left: 0px; top: 0px; min-height: 100px; width: 495px; overflow: auto;"> 
       <ContentTemplate> 
        <div class="reorderListDemo" style="position: relative; left: -41px; width: 490px; overflow: auto;"> 
         <ajax:ReorderList ID="rlAlerts" Style="min-height: 100px; padding: 0px 6px 0px 0px;" Width="480px" runat="server" PostBackOnReorder="false" CallbackCssStyle="callbackStyle" DragHandleAlignment="Left" DataKeyField="ItemID" SortOrderField="Priority" OnItemReorder="rlAlerts_ItemReorder"> 
          <ItemTemplate> 
           <%--set the class to inactiveAlert if the active flag is set to false--%> 
           <div id="alertItem<%# Eval("ItemID")%>" class="<%# Convert.ToBoolean(Eval("Active")) ? "" : "inactiveAlert" %>" onclick="updateAlertPreview('<%# Eval("ItemID")%>','<%# Eval("Priority")%>','<%# Eval("Title") %>','<%# Eval("Description") %>', '<%# Eval("StartDate") %>', '<%# Eval("EndDate") %>', '<%# Eval("Image") %>');"> 
            <div style="position: relative; float: left; left: 10px; padding-top: 6px; overflow: hidden; width: 180px; height: 17px;"> 
             <asp:Label ID="Label4" runat="server" Text='<%# HttpUtility.HtmlEncode(Convert.ToString(Eval("Title"))) %>' /> 
            </div> 
           </div> 
          </ItemTemplate> 
          <ReorderTemplate> 
           <asp:Panel ID="Panel2" runat="server" CssClass="reorderCue" /> 
          </ReorderTemplate> 
          <DragHandleTemplate> 
           <div class="dragHandle"> 
           </div> 
          </DragHandleTemplate> 
         </ajax:ReorderList> 
        </div> 
       </ContentTemplate> 
       <Triggers> 
        <asp:AsyncPostBackTrigger ControlID="rlAlerts" EventName="ItemReorder" /> 
        <asp:AsyncPostBackTrigger ControlID="ckbxShowInactive" EventName="CheckedChanged" /> 
       </Triggers> 
      </asp:UpdatePanel> 

현재이 업데이트 패널은 항목이 재정렬되거나 확인란 상태가 변경되면 업데이트됩니다. 이제 목록이 재정렬 될 때 업데이트되지 않는이 두 번째 updatePanel이 있습니다. 내가 코드를 밟은 적이

protected void rlAlerts_ItemReorder(object sender, AjaxControlToolkit.ReorderListItemReorderEventArgs e) 
     { 
      ..... 
      Session["AlertOrderChangedNotification"] = Resources.LocalizedText.Alert_Order_Changed; 

      lblOrderChangedNotification.Text = "AWESOME"; 
      //lblOrderChangedNotification.DataBind(); 
      //UpdatePanelAlertOrderNotification.Update(); 
} 

나는 그것이 작동하지 않는 이유를 알아낼 수 없습니다 :

<asp:UpdatePanel ID="UpdatePanelAlertOrderNotification" UpdateMode="Conditional" runat="server"> 
        <ContentTemplate> 
         <asp:Label ID="lblOrderChangedNotification" runat="server"></asp:Label> 
        </ContentTemplate> 
        <Triggers> 
         <asp:AsyncPostBackTrigger ControlID="rlAlerts" EventName="ItemReorder" /> 
        </Triggers> 
       </asp:UpdatePanel> 

다음은 뒤에 내 코드입니다.

피곤한 점 : 나는 피곤했다 : 항상 UpdatePanelAlertOrderNotification의 UpdateMode를 설정한다. UpdatePanelAlertOrderNotification의 UpdateMode를 조건부로 설정하고 해당 트리거를 제거하고 코드 숨김 기능을 사용하여 updatepanel을 직접 업데이트해야합니다. 은 세션에 텍스트를 저장하고 페이지 포스트가 실행되어 세션에 텍스트가 있는지 확인합니다. 나는이 코드를 pageLoad 함수에서 처리 할 수 ​​있으며 여전히 아무 것도하지 않는다. (주석 모두 선으로 시도하고 만 1, 후 그들 중 누구도과 주석.)

protected void Page_Load(object sender, EventArgs e) 
     { 
      if (Session["AlertOrderChangedNotification"] != null) 
      { 
       lblOrderChangedNotification.Text = Session["AlertOrderChangedNotification"] as string; 
       //lblOrderChangedNotification.DataBind(); 
       //UpdatePanelAlertOrderNotification.Update(); 
      } 
     } 

나는이 두 업데이트 패널을 가지고 있기 때문에 나는이 문제에 봉착하면 나도 몰라 같은 트리거 (심지어 하지만 나는 UpdatePanelAlertOrderNotification에서 제거하고 항상으로 설정해야했습니다.)

챙을 : 그래서 나는 새로운 버튼을 추가하고 updatepanel 업데이트 얻기 위해 노력했다. 이 작동합니다. 트리거를 재주문 목록으로 다시 전환하면 작동하지 않습니다. 그래서 내 질문은, 나는 동일한 트리거와 2 개의 서로 다른 updatePanels 가질 수 있습니까? 만약 내가 UpdatePanelAlertOrderNotification.Update()를 호출하여 깨진 하나의 업데이트를 가질 수 없어야합니까 ?? 아이디어?

<div style="position: absolute; top: 195px; right: 10px; height: 100px; width: 120px; overflow: hidden;"> 
        <asp:UpdatePanel ID="UpdatePanelAlertOrderNotification" UpdateMode="Conditional" runat="server"> 
         <ContentTemplate> 
          <asp:Label ID="lblOrderChangedNotification" runat="server"></asp:Label> 
         </ContentTemplate> 
         <Triggers> 
          <%--<asp:AsyncPostBackTrigger ControlID="rlAlerts" EventName="ItemReorder" />--%> 
          <asp:AsyncPostBackTrigger ControlID="btnUpdateBrokenUpdatePanel" EventName="Click" /> 
         </Triggers> 
        </asp:UpdatePanel> 
        <div style="position: relative; top: 25px; left: 10px;"> 
         <asp:Button ID="btnUpdateBrokenUpdatePanel" runat="server" CssClass="redButton" Width="300px" Height="25px" Text="Update Broken UPdatePanel" OnClick="btnUpdateBrokenUpdatePanel_Click" /> 
        </div> 

도움이 될 것입니다. 감사합니다 Brad

+0

아마도 이것과 관련이 있습니까? UpdateMode = "조건부" 왜 항상 설정하지 않습니까? –

+0

나는 그것을 항상 가지고 있었고 여전히 업데이트하지는 않았다. – Brad8118

답변

0

업데이트 패널에 문제가있는 것 같아요. 적절한 알림을받지 못하고, 조건부 트리거로 랩핑을 설정 한 다음 다른 방법으로 업데이트 메소드를 호출하게합니다. 사람.

확인하고 싶은 것은 실제로 해당 항목의 표시를 업데이트하는 코드도 실행된다는 것입니다.

+0

나는 UpdatePanelAlertOrderNotification이 적절한 통지를 갱신하거나받지 못한다는 것에 동의한다. 나는 왜 그것이 아닌지 모른다. "조건부 트리거로 랩핑을 설정했습니다." UpdatePanelAlertOrderNotification에을 추가 하시겠습니까? – Brad8118

0

컨트롤 rlAlerts가 첫 번째 업데이트 패널의 콘텐츠 템플릿에 있고 두 번째 updatepanel에서 비동기 트리거를 정의하면 rlAlerts에 대한 명명 된 컨테이너가 첫 번째 업데이트 패널.

을 다음 방법 중 하나를 시도해보십시오 updatepanel의 외부

  • 를 적어 rlAlerts, 즉 명시 적으로() UpdatePanelAlertOrderNotification.Update를 호출 할 ItemReorder 이벤트 핸들러 뒤에 코드에서
  • 가능한 경우.

    UpdatePanelAlertOrderNotification.Triggers.Add (새 AsyncPostBackTrigger() {컨트롤의 controlid = rlAlerts : 당신이 시도하고 이상하다이 나던 작품은,

  • 명시 적으로 사전 렌더링에 2 updatepanel에 대한 뒤에 코드에서 방아쇠를 등록 같은 소리 .UniqueID, EventName = "ItemReorder"}));

+0

1 - rlAlerts를 이동할 수 없습니다. 2 - 작동하지 않는 것이 확실하지 않습니다. 3 - 시도해보십시오. 좋은 생각이지만 운이 없다. 또한 잘못된 ControlID를 넣으려고했는데 페이지에서 컨트롤을 찾을 수 없다는 오류가 발생합니다. 그래서 그것은 발견해야합니다. – Brad8118

+0

매우 이상합니다. 나는 언젠가는 그것을 해결하기 위해 시간이 걸리고 실제로 환경과 디버깅 없이는 도움이되기 어려울 것이라고 생각한다. 절망적 인 경우 여기에 대한 대안 제안. 두 번째 업데이트 패널에 숨겨진 버튼을 추가하여 btnHidden이라고 말하고 더미 메소드로 연결합니다. 그런 다음 ItemReorder 메서드에서 ScriptManager.RegisterStartupScript (... ","__doPostback (' "+ btnHidden.UniqueID +"',) ", true); 고유 ID 또는 ClientID를 사용해야하는지 확실하지 않지만 그 중 하나가 작동해야합니다. 이것은 기본적으로 두 번째 업데이트 패널 –

+0

까지 다시 게시를 강제합니다. 좋은 생각입니다. 그것의 해킹하지만 작동합니다. 내가 알려 주마. – Brad8118

관련 문제