Изображение внутри UpdatePanel не работает в Firefox
-
03-07-2019 - |
Вопрос
У меня есть изображение, которое автоматически генерируется внутри Ajax UpdatePanel.Это изображение представляет собой график, созданный на основе серверного кода.Поискав в Гугле, я понял, что это баг ФФ.Есть ли у кого-нибудь решение?
Вот исходник (там же есть ненужные теги, я просто скопировал-вставил)
<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>
Решение 2
Кроме того, это не очень хорошее решение: установка кэширования на nocache решила мою проблему.Я написал это при загрузке страницы
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Это также работает, установив этот код
<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>
Другие советы
Какую версию .NET вы используете?Платформа 3.5 имеет новый элемент управления графиками.Я провел несколько дней, играя с ним, и был удивлен, насколько он мощный.И я также использовал его в UpdatePanels без каких-либо проблем.
Мне кажется, что у вас должна быть одна и та же проблема в FF или IE, независимо от того.
Я заметил на вашей панели обновлений, что у вас есть
UpdateMode="Conditional"
но вы не указываете никаких триггеров.это означает, что содержимое панели обновления не будет активироваться ничем иным, кроме кнопок внутри панели обновления, которых я не вижу.Попробуйте изменить UpdateMode на Always для отладки и посмотрите, решит ли это вашу проблему, и оттуда определите соответствующий триггер.
РЕДАКТИРОВАТЬ:
Можете ли вы контролировать, как графическое имя/имя файла создается и отображается в браузере?Может ли изображение быть кэшировано браузером?У меня были проблемы с упаковкой графиков в Java/JSP с вызовами AJAX.Мне пришлось добавить GUID к переменной строки запроса URL-адреса AJAX, чтобы исправить проблему с кешированием.
Некоторые копают с FireBug привел меня к выводу, что возвращается один и тот же URL-адрес изображения независимо от того, выбираю ли я 120 Ditë, 30 Ditë или mesataret.Похоже, ваш элемент управления диаграммой возвращает один и тот же URL-адрес изображения, даже если данные, стоящие за ним, изменяются.Мне кажется это глюк в управлении.
Вы можете использовать файл web.config в каталоге WebCharts, чтобы настроить кэширование изображений, обслуживаемых оттуда, чтобы они никогда не кэшировались.