Невозможно обновить изображение с помощью HttpHandler, UpdatePanel и Timer - PullRequest
2 голосов
/ 12 сентября 2011

Я пытаюсь в ASP.NET использовать HTTPHandler для отображения изображения и обновления каждые 5 секунд.Этот httphandler просто отображает текущее время в растровое изображение.На стороне aspx изображение находится внутри AJAX UpadtePanel, и я использую таймер для обновления изображения каждые 5 секунд.

Моя проблема заключается в следующем:

  • в IE9,изображение не обновляется вообще.Мой HttpHandler запрашивается только один раз.
  • в chrome, изображение обновляется, но оно «мигает», т. Е. Каждые 5 секунд оно очищается в течение нескольких секунд, затем отображается, затем очищается снова и т. Д. *

Для целей отладки я также добавил в UpdatePanel метку, заполненную случайным значением.Он хорошо обновляется в обоих веб-браузерах.

Вот код на моей странице aspx:

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Timer runat="server" ID="UpdateTimer" Interval="5000" OnTick="UpdateTimer_Tick" />
<asp:UpdatePanel runat="server" ID="TimedPanel" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="UpdateTimer" EventName="Tick" />
    </Triggers>
    <ContentTemplate>
        <asp:Image ID="TheImage" alt="httpHandler" src="getImage.ashx?id=1" runat="server" />
        <asp:Label ID="Label" runat="server" Font-Size="XX-Large" ></asp:Label>
    </ContentTemplate>
</asp:UpdatePanel>

В моем HttpHandler я не забыл отключить кэширование следующим образом:

cache.SetCacheability(HttpCacheability.NoCache);
cache.SetNoStore();
cache.SetExpires(DateTime.MinValue);

И чтобы мой браузер IE9 не кэшировал изображение, я также пытался изменять ImageUrl каждый раз, когда таймер вызывается в файле aspx.cs, как показано ниже.Но мой HttpHandler по-прежнему вызывается только один раз, когда страница отображается впервые:

protected void UpdateTimer_Tick(object sender, EventArgs e)
{
Label.Text = ((System.Environment.TickCount / 100.0) % 360).ToString("F2");
TheImage.ImageUrl = "getImage.ashx?id=" + System.Environment.TickCount.ToString();
}

Я надеюсь, что моя проблема хорошо объяснена.Что я делаю не так?

Заранее спасибо!

1 Ответ

0 голосов
/ 12 сентября 2011

Некоторые предложения:

  • Добавьте Enabled="True" к вашему таймеру.
  • Добавьте исходный код вашего getImage.ashx к вашему сообщению.
  • ИспользуйтеТеги asp.net, такие как ImageUrl в ваших <asp:Image /> вместо собственных тегов html.
  • Используйте div вместо img (т.е. <asp:Panel />)
  • changeрежим обновления вашей панели обновления до Always
...