Pergunta

Eu tenho uma imagem que é gerada automaticamente dentro de um Ajax UpdatePanel. Esta imagem é um gráfico que é gerado a partir do código do lado do servidor. Pesquisando no Google, eu percebi que era um bug do FF. Alguém tem alguma solução?

Aqui está a fonte (que contém também as tags desnecessárias, eu apenas copiou-colar)

<div>
   <asp:UpdatePanel ID="UpdatePanelGraph" runat="server" UpdateMode="Conditional">
       <ContentTemplate>
           <asp:Panel ID="pnlGraph" runat="server" CssClass="container">
                <div id="chart">
                     <Web:ChartControl ID="chartExchange" runat="server" Width="300px" Height="200px" BorderStyle="None" GridLines="both" DefaultImageUrl="../images/noData.png" ShowTitlesOnBackground="False" BorderWidth="1px" Padding="1" HasChartLegend="False" BottomChartPadding="20" TopChartPadding="5" RightChartPadding="5" LeftChartPadding="20">
                            <Border Color="211, 224, 242"></Border>
                            <YAxisFont ForeColor="115, 138, 156" Font="Tahoma, 7pt" StringFormat="Far,Center,Character,LineLimit"></YAxisFont>
                            <XTitle ForeColor="115, 138, 156" StringFormat="Center,Near,Character,LineLimit">
                            </XTitle>
                            <XAxisFont ForeColor="115, 138, 156" StringFormat="Near,Near,Character,NoClip"></XAxisFont>
                            <Background Type="LinearGradient" Color="#C9DEFD" ForeColor="Transparent" EndPoint="500, 500">
                            </Background>
                            <ChartTitle ForeColor="51, 51, 51" Font="Verdana, 9pt, style=Bold" StringFormat="Near,Near,Character,LineLimit">
                            </ChartTitle>
                            <Charts>
                                <Web:SmoothLineChart Name="buy" Legend="Blen">
                                    <Line Color="ActiveCaption"></Line>
                                    <DataLabels>
                                        <Border Color="Transparent"></Border>
                                        <Background Color="Transparent"></Background>
                                    </DataLabels>
                                </Web:SmoothLineChart>
                                <Web:ColumnChart Name="avgChart">
                                </Web:ColumnChart>
                            </Charts>
                            <YTitle ForeColor="115, 138, 156" StringFormat="Center,Near,Word,LineLimit"></YTitle>
                    </Web:ChartControl>
                </div>                
            </asp:Panel>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
Foi útil?

Solução 2

Além disso, não é uma boa solução, definindo o cacheability para nocache resolveu o meu problema. I worte isso no meu pageload

  Response.Cache.SetCacheability(HttpCacheability.NoCache);

Ele também funciona através da criação deste código

<script type="text/javascript">

      var prm = Sys.WebForms.PageRequestManager.getInstance();
      prm.add_pageLoaded(pageLoaded);
      var c = 0;
      function pageLoaded(sender, args)
      {
      var img = document.getElementById("ctl00_ctl00_MainContent_MainContent_chartExchange");
      c++;
      img.src = img.src + "?" + c;
      }

</script>

Outras dicas

Qual versão do .NET você está usando? O quadro 3.5 tem um novo controle de gráficos. Passei alguns dias a brincar com ele, e foi surpreendido com o quão poderoso é. E eu também usou em UpdatePanels sem qualquer problema.

Parece-me que você deve ter o mesmo problema em FF ou IE, independentemente.

Tenho notado em seu updatepanel que você tem

UpdateMode="Conditional"

mas você não especificar quaisquer gatilhos. O que isto significa é o conteúdo do painel de atualização não vai ficar desencadeada por qualquer outra coisa que não seja nenhum botão dentro do painel de atualização que eu não vejo. Tente alterar o UpdateMode para Sempre para depuração e ver se isso resolve o seu problema, e trabalho fora do gatilho apropriado de lá.

EDIT:

Você pode controlar como o nome nome / arquivo gráfico é criado e processada para o navegador? Poderia a imagem ser armazenada em cache pelo navegador? Eu tive problemas com uma embalagem de gráficos em Java / JSP com chamadas AJAX. Eu tive que acrescentar um GUID para o meu AJAX variável string de consulta url para corrigir o problema de cache.

Alguns escavação com FireBug me levou a descobrir que exatamente o mesmo URL da imagem está sendo devolvido se eu selecionar 120 dite ou 30 dite ou mesataret. Parece que seu controle de gráficos está retornando o mesmo URL da imagem, mesmo quando os dados por trás dele muda. Parece-me que um bug no controle.

Você pode ser capaz de usar um web.config no diretório WebCharts para definir o cacheability de imagens serviram de lá, para levá-los para nunca mais ser armazenada em cache.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top