2012-01-30 1 views
1

정보 라인과 사용자 지정 단추가 포함 된 리피터가있는 ASP.NET 3.5 페이지에서 상태를 변경합니다. asp : 리피터 내부에서 다운로드 가능한 콘텐츠를 클릭 한 후 UpdateProgress가 사라지지 않음

는이

btn1 btn2 btn3 Id Title Description Status1 Status2

인 btn1처럼 및 btn2는 각각 상태 1과 2를 변경하는 데 사용되는 가정하자.

btn3은 다운로드 가능한 MS-Word 보고서를 다시 보내는 사용자 지정 처리기로 리디렉션됩니다. 이것은 실제로 페이지를 떠나지 않고 발생합니다.

리피터가 updatePanel 안에 있으므로 매번 전체 페이지를 다시로드하지 않아도 상태를 업데이트 할 수 있습니다.

btn1 또는 2를 클릭하면 로딩 스피너가 평소와 같이 나타나고 프로세스가 완료되고 상태가 변경되면 페이드 아웃됩니다.

btn3을 클릭하면 다운로드가 완료된 후에도 로딩 스피너가 그대로 있으며 외출하지 않습니다.

어떤 일이 벌어 질 수 있습니까?

처리기 코드 : 리피터에

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Net; 
using System.IO; 
using PublishVersionControlCore; 
using System.Configuration; 

namespace PublishVersionControlWebControl.Handler 
{ 
    public class WordFileHandler : IHttpAsyncHandler 
    { 
     private HttpContext _context; 
     private AsyncTaskDelegate del; 
     protected delegate void AsyncTaskDelegate(HttpContext context); 

     #region IHttpAsyncHandler Members 

     public WordFileHandler() 
     { 
      this.del = new AsyncTaskDelegate(ProcessRequest); 
     } 

     public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData) 
     { 
      // Store context 
      _context = context; 
      return del.BeginInvoke(context, cb, extraData); 
     } 

     public void EndProcessRequest(IAsyncResult result) 
     { 
      this.del.EndInvoke(result); 
     } 

     #endregion 

     #region IHttpHandler Members 

     public bool IsReusable 
     { 
      get { return true; } 
     } 

     public void ProcessRequest(HttpContext context) 
     { 
      HttpResponse resp = context.Response; 
      resp.Clear(); 
      int workItemId = 0; 
      if (Int32.TryParse(context.Request.QueryString["wi"], out workItemId)) 
      { 
       MemoryStream ms = null; 
       using (WorkItemReportService.ReportClient client = new WorkItemReportService.ReportClient()) 
       { 
        byte[] resultFile = client.GenerateWorkReport(
         new Uri(ConfigurationManager.AppSettings["serverUri"]), 
         workItemId, 
         ConfigurationManager.AppSettings["wordTemplate"]); 
        ms = new MemoryStream(resultFile); 
       } 

       resp.ContentType = "application/octet-stream"; 
       resp.AddHeader("content-disposition", String.Format("attachment;filename=RelatorioSimples_WI-{0}.docx", workItemId)); 
       resp.Buffer = true;     
       ms.WriteTo(resp.OutputStream); 
       resp.End(); 
      } 
     } 

     #endregion 
    } 
} 

ItemCommand :

if (e.CommandName.Equals("WordExport")) 
{ 
    string uri = HttpContext.Current.Request.RawUrl; 
    string url = string.Format("{0}/WordReport.dohx?wi={1}", 
    uri.Substring(0, uri.LastIndexOf("/")), wivdata.SystemID); 
    Response.Redirect(url); 
} 

영문 페이지 (I 관련이었고, 무엇을하지 무엇인지 파악하지 않았다 나는 이후 모든 붙여 넣기) :

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="~/ListaDeAtividadesPage.aspx.cs" 
    MasterPageFile="~/_layouts/customapplication.master" Inherits="PublishVersionControlWebControl.ListaDeAtividadesPage, PublishVersionControlWebControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=78508f22b73cda2b" %> 

<%@ Register Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
    Namespace="System.Web.UI" TagPrefix="asp" %> 
<asp:Content ContentPlaceHolderID="PlaceHolderAdditionalPageHead" runat="server"> 
    <link rel='stylesheet' text='text/css' href='/_layouts/Extensions/Versioning/css/style.css' /> 
    <script src="/_layouts/Extensions/Versioning/js/jquery.tools.min.js" type="text/javascript"></script> 
    <script src="/_layouts/Extensions/Versioning/js/jquery.corner.js" type="text/javascript"></script> 
</asp:Content> 
<asp:Content ID="Content1" ContentPlaceHolderID="PlaceHolderPageImage" runat="server"> 
    <img width="145" height="54" alt="Dashboard" src="/_layouts/Microsoft.TeamFoundation/images/notes.png" /> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="PlaceHolderPageTitleInTitleArea" 
    runat="server"> 
    <asp:Literal ID="TitleContent" runat="server"></asp:Literal> 
</asp:Content> 
<asp:Content ID="Main" ContentPlaceHolderID="PlaceHolderMain" runat="server"> 
    <script type="text/javascript"> 
     _spOriginalFormAction = document.forms[0].action; 
     _spSuppressFormOnSubmitWrapper = true; 
    </script> 
    <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="updPanel"> 
     <ProgressTemplate > 
      <div class="follower"> 
      <asp:Image ID="imgUpdate" CssClass="follower" ImageUrl="/_layouts/Extensions/Versioning/img/ui/ajax-loader.gif" 
       runat="server" /> 
       <span class="follower">Carregando...</span> 
      </div> 
     </ProgressTemplate> 
    </asp:UpdateProgress> 
    <div> 
     <asp:UpdatePanel ID="updPanel" runat="server"> 
      <ContentTemplate> 
       <asp:Literal ID="tooltipScript" runat="server" /> 
       <div class="buttonBar"> 
        <hr style="color: #426DA8;" /> 
        <asp:Button CssClass="specific" ID="btnUpdateWI" Text="Atualiza WIs da Lista" runat="server" 
         UseSubmitBehavior="false" /> 
        <asp:Button CssClass="specific" ID="btnRelatorioScripts" Text="Relatório de Scripts/ZIPs" 
         runat="server" /> 
        <asp:Button CssClass="specific" ID="Button1" Text="Relatório de Publicações" runat="server" /> 
        <asp:Button CssClass="generic" ID="btnVolta" Text="Volta ao Menu de Versões" runat="server" /> 
        <hr style="color: #426DA8;" /> 
       </div> 
       <asp:Repeater ID="rptListaAtividades" runat="server"> 
        <HeaderTemplate> 
         <asp:Label ID="comentarioHeader" runat="server"/> 
         <h3> 
          <b class="rollback">Rollback</b> | <b class="emteste">Em Teste</b> | <b class="aindanaoincluido"> 
           Ainda não Incluído</b> | <b class="parcialmenteok">Atividade Parcialmente OK</b> 
          | <b class="todosok">Atividade OK em Todas as Lojas</b> | <b class="parcpublicado">Parcialmente Publicada</b> | <b class="publicado">Atividade 
           Publicada</b> 
         </h3> 
        </HeaderTemplate> 
        <ItemTemplate> 
         <div class="item" style="display: inline-block; font-size: 12px"> 
          <asp:ImageButton ToolTip="Gerar Relatório Word" ImageUrl="/_layouts/Extensions/Versioning/img/wordexport.png" 
           CommandName="WordExport" ID="btnWordExport" CssClass="itembutton" runat="server" /> 
          <asp:ImageButton ToolTip="Marcar como Rollback" ImageUrl="/_layouts/Extensions/Versioning/img/rollback.png" 
           CommandName="MarkAsRollback" ID="btnItemRollback" CssClass="itembutton" runat="server" /> 
          <asp:ImageButton ToolTip="Esta atividade possui código. Clique para sinalizar como apenas procedure/config" 
           ImageUrl="/_layouts/Extensions/Versioning/img/code.png" CommandName="MarkAsProc" 
           ID="btnItemProc" CssClass="itembutton" runat="server" /> 
          <asp:Image ToolTip="Esta atividade não possui scripts de banco/zips." ImageUrl="/_layouts/Extensions/Versioning/img/noscript.png" 
           runat="server" CssClass="itembutton" ID="btnItemScript" /> 
          <asp:Label ID="labelWI" Text="" runat="server"></asp:Label> 
          <asp:Literal ID="tooltip" runat="server" /> 
          <asp:Label ID="labelState" Text="" runat="server"></asp:Label> 
          <span style="color: #4A82CB"> 
           <%# DataBinder.Eval(Container.DataItem, "SystemAssignedTo") %> 
           - </span><span style="color: Navy"> 
            <%# DataBinder.Eval(Container.DataItem, "SystemTitle") %> 
           </span> 
          <asp:HiddenField ID="workItemID" runat="server" /> 
         </div> 
         <hr class="item" noshade style="color: #4CBDCB; height: 2px; background-color: #4CBDCB" /> 
        </ItemTemplate> 
       </asp:Repeater> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 
</asp:Content> 

기타 자세한 사항 :

  • 내가 그것을

답변

1

당신은 updatepanel 내부 호출의 Response.Redirect(url)를 호출 할 수 있어야 할 곳에 업데이트 패널은 확실하지 않다 WSS 3.0

  • 의 레이아웃 페이지입니다.

    이 리디렉션을 사용하면 viewstate가 손상되고 updatepanel이 묻는 정보를 반환하지 않습니다. 다운로드 링크에 대한 다른 방법을 찾거나 updatepanel을 제거하십시오.

    아약스 및 UpdatePanel의 작동 방식을 이해하십시오. 당신은 Ajax 요청을 보내고 UpdatePanel은 응답 데이터를 기다리고, 그 데이터를 결코 보내지 않으므로 표시기는 여전히 기다린다. 하지만 당신이 viewstate 휴식 게시물을 만들었습니다, 그리고 두 번째 게시물에 자바 스크립트 오류가있을거야.

    가능한 해결책은 리디렉션을 만들기 위해 자바 스크립트를 렌더링하는 것입니다.하지만 javascript 함수 호출을 사용하십시오.

  • +0

    고맙습니다. 제 솔루션에서 자바 스크립트를 사용하여 파일을 요청했습니다. –