2013-04-02 2 views
0

저는 수 시간 동안이 문제에 봉착했습니다. 검색된 포럼은 사람들이 제안한 모든 것을 시도했지만 효과가 없습니다.ASP.Net UpdatePanel 업데이트되지 않음, 부분 포스트 백 발생 횟수

나는 (다소 큰) 웹 양식을 가지고 있습니다. 폼의 어딘가에는 CuteSoft Ajax Uploader 컨트롤이 포함 된 updatePanel이 있습니다. 이 컨트롤은 파일이 업로드 될 때 내 코드에서 함수를 호출합니다. 제대로 작동합니다. 이 함수에서는 updatePanel (축소판 등 추가)의 내용을 약간 변경했지만 변경 사항은 프런트 엔드에 반영되지 않습니다. (관련이없는 비트가 밖으로 다진와) 여기

폼의 :

코드 숨김은 다음과 같습니다
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="VehicleSubmissionWizard.ascx.cs" 
    Inherits="MaxAdmin.UserControls.VehicleSubmissionWizard" %> 
... 
<div id="template3" style="display: none;"> 
    <div class="top-section"> 
     <div id="column-left"> 
      ... 
     <div id="column-right"> 
      ... 
    <form runat="server" id="form1" action=""> 
    <%--Panel 1--%> 
    <asp:Panel runat="server" ID="pnlSubmissionWizard1"> 
     ... 
    </asp:Panel> 
    <%--/Panel 1--%> 
    <%--Panel 2--%> 
    <asp:Panel runat="server" ID="pnlSubmissionWizard2"> 
     ... 
      <h2> 
       Vehicle images</h2> 
      <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" 
       AjaxFrameworkMode="Enabled" ClientIDMode="Static" EnableViewState="true" LoadScriptsBeforeUI="true" 
       ScriptMode="Auto" ViewStateMode="Enabled"> 
      </asp:ScriptManager> 
      <asp:UpdatePanel runat="server" EnableViewState="false" ID="upImageUpload" UpdateMode="Conditional"> 
       <Triggers> 
        <%--     <asp:AsyncPostBackTrigger ControlID="Uploader" 
          EventName="FileUploaded" /> 
        --%> 
       </Triggers> 
       <ContentTemplate> 
        <input id="hdnImages" class="imagesUpload" type="hidden" /> 
        <asp:HiddenField ID="hdn" runat="server" /> 
        <CuteWebUI:Uploader ID="Uploader" runat="server" EnableViewState="false" MaxFilesLimit="3" 
         MaxFilesLimitMsg="Please upload a maximum of 3 photos" InsertButtonStyle-Width="280px" 
         MultipleFilesUpload="true" InsertText="Upload Photos [Max 3 Photos at up to 4mb each]" 
         OnFileUploaded="Uploader_FileUploaded" OnUploadCompleted="Uploader_Complete"> 
         <ValidateOption MaxSizeKB="4096" AllowedFileExtensions="jpg,gif,png" /> 
        </CuteWebUI:Uploader> 
        <div id="attachmentsDiv"> 
         <CuteWebUI:UploadAttachments EnableViewState="false" runat="server" ID="Attachments" 
          MaxFilesLimit="3" Visible="false"> 
          <ValidateOption MaxSizeKB="4096" AllowedFileExtensions="jpg,gif,png" /> 
         </CuteWebUI:UploadAttachments> 
        </div> 
        <br /> 
        <asp:Panel ID="pnlImageDetails_1" runat="server" CssClass="display_none" Style="float: left; 
         margin-bottom: 0"> 
         <div class="uploadedImage" style="clear: both; float: left; margin: 5px 20px 5px 75px;"> 
          <div style="text-align: center"> 
           <asp:Image ID="imgUploadedImage1" runat="server" /> 
          </div> 
          <div style="text-align: center"> 
           <asp:LinkButton ID="btnRemoveImage_1" runat="server" OnCommand="RemoveImage_Click" 
            CommandName="1" Text="Remove Image" CssClass="RemoveLinkButton" Style="margin-left: 15px;" /> 
          </div> 
         </div> 
        </asp:Panel> 
        <asp:Panel ID="pnlImageDetails_2" runat="server" CssClass="display_none" Style="float: left;"> 
         <div class="uploadedImage" style="clear: both; float: left; margin: 5px 20px 5px 20px;"> 
          <div style="text-align: center"> 
           <asp:Image ID="imgUploadedImage2" runat="server" /> 
          </div> 
          <div style="text-align: center"> 
           <asp:LinkButton ID="btnRemoveImage_2" runat="server" OnCommand="RemoveImage_Click" 
            CommandName="2" Text="Remove Image" CssClass="RemoveLinkButton" Style="margin-left: 15px;" /> 
          </div> 
         </div> 
        </asp:Panel> 
        <asp:Panel ID="pnlImageDetails_3" runat="server" CssClass="display_none" Style="float: left;"> 
         <div class="uploadedImage" style="clear: both; float: left; margin: 5px 20px 5px 20px;"> 
          <div style="text-align: center"> 
           <asp:Image ID="imgUploadedImage3" runat="server" /> 
          </div> 
          <div style="text-align: center"> 
           <asp:LinkButton ID="btnRemoveImage_3" runat="server" OnCommand="RemoveImage_Click" 
            CommandName="3" Text="Remove Image" CssClass="RemoveLinkButton" Style="margin-left: 15px;" /> 
          </div> 
         </div> 
        </asp:Panel> 
        <script language="javascript" type="text/javascript"> 
         var Image_Count = $('#<%= hdn.ClientID %>').val(); 
        </script> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
      ... 
    </asp:Panel> 
    <%--/Panel 2--%> 
    <%--Panel 3--%> 
    <asp:Panel runat="server" ID="pnlSubmissionWizard3"> 
     ... 
    </asp:Panel> 
    <%--/Panel 3--%> 
    <%-- Panel 4--%> 
    <asp:Panel Visible="false" runat="server" ID="pnlSubmissionWizard4"> 
     ... 
    </asp:Panel> 
    <%--/Panel 4--%> 
    </form> 
    ... 
</div> 

:

...

 protected override void OnInit(EventArgs e) 
     { 
      base.OnInit(e); 

      //Uploader.FileUploaded += new CuteWebUI.UploaderEventHandler(Uploader_FileUploaded); 
      Uploader.FileUploaded += Uploader_FileUploaded; 
      Uploader.UploadCompleted += Uploader_Complete; 
      Attachments.AttachmentRemoveClicked += Attachments_AttachmentRemoveClicked; 
      Attachments.InsertButton.Style["display"] = "none"; 
      ((HiddenField)FindControl("hdn")).Value = "0"; 
     } 

... 

     protected void Uploader_FileUploaded(object sender, CuteWebUI.UploaderEventArgs args) 
     { 
      ... 

       using (System.IO.Stream stream = args.OpenStream()) 
       { 
        // Check if file already exists - seems to do each image twice for some reason... 
        foreach (var ph in Photos) 
         if (String.Equals(ph.FileName, args.FileName)) 
          return; 

        ... 

        // Show image thumbnail 
        ShowUploadedPhotoDetails(p, ImageCount); 
       } 
      } 
      catch (Exception ex) 
      { 
       ... 
      } 
     } 

    private void ShowUploadedPhotoDetails(Photo photo, int imageNo) 
    { 
     if (imageNo <= 3) 
     { 
      var imagePanel = (Panel)FindControl(String.Concat("pnlImageDetails_", imageNo)); 
      imagePanel.CssClass = "display_block"; 
      imagePanel.Visible = true; 

      var uploadedImage = (System.Web.UI.WebControls.Image)FindControl(String.Concat("imgUploadedImage", imageNo)); 
      uploadedImage.ImageUrl = photo.ImageUrlThumb; 
      uploadedImage.Visible = true; 
      uploadedImage.CssClass = "CSS_CLASS"; 
     } 
    } 

     protected void Uploader_Complete(object sender, CuteWebUI.UploaderEventArgs[] args) 
     { 
      Uploader uploader = (Uploader)sender; 
      uploader.InsertButton.Enabled = (Photos.Count < 3); 

      // Force updatePanel to update 
      upImageUpload.Update(); 
     } 

을 그래서 모두 위의 기능 불 때를 이미지가 업로드됩니다. 이미지 데이터가 제대로 전달됩니다. 컨트롤 (예 : ImageUrl, CssClass 등)에 할당 된 값을 디버깅하면 컨트롤에 올바르게 할당되고 있음을 알 수 있습니다. 그러나 값은 프런트 엔드에서 결코 새로 고쳐지지 않습니다.

내가 놓친 아이디어가 있습니까?

감사 힙 그렉

+0

아마 Uploader_Complete 이벤트가 마지막 페이지 이벤트 이후에 발생하여 화면에서 출력을 업데이트 할 수 있습니다. – TheGeekYouNeed

답변

0

휴, 나는 그것을 얻었다! 기본적으로 나는 지루한 작은 단계로 전체 양식을 재건했다. 내 작업 양식에 그 다시 추가

PostbackUrl = ".." 

: 나는 작동을 중지 정확히 모르는 동안, 나는 그것이 형태의 다른 부분에 버튼에 설정 한 다음과 같은 특성으로 인해 발생 된 의심 updatePanel을 중단시킵니다.하지만 원래의 부러진 양식에서 제거하면 수정되지 않으므로 거기에 다른 내용이있을 수도 있습니다. 이 이벤트 등 (TheGeekYouNeed하지만 좋은 생각의 순서와는 아무 상관이 없었다

어떤 코드가 변경되지 않았다.

이 Asp.Net 2.0 4.0으로 업데이트 프로젝트 있습니다 .. 아마도 뭔가했다 업 그레 이드 업 그레 이드. 어쨌든 그것은 적어도 고정되어 있습니다. 어쨌든 적어도 수정되었습니다. PHEW!

관련 문제