Imagem dentro UpdatePanel não funciona no Firefox
-
03-07-2019 - |
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>
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.