Возможная ссылка на память при использовании UpdatePanel с вызовом JavaScript - PullRequest
0 голосов
/ 18 марта 2012

В ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TimerUpdate3.aspx.cs" Inherits="TimerUpdate3" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Untitled Page</title>
    <script type="javascript">
        showMessage(msg) { alert(msg); }
    </script>
</head>
<body>
<form id="form1" runat="server">
  <asp:ScriptManager ID="ScriptManager1" runat="server" />
  <asp:Timer ID="Timer1" OnTick="Timer1_Tick" runat="server" Interval="1000" />
  <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
    </Triggers>
    <ContentTemplate>
        <asp:Label ID="Label1" runat="server" Text="Not refreshed yet..."></asp:Label>
        <table id="Incidents" runat="server" cellspacing="0" cellpadding="5" style="padding:0; width:400px;"></table>
    </ContentTemplate>
  </asp:UpdatePanel>
</form>
</body>
</html>

В C #:

using System;  
using System.Web.UI;
using System.Web.UI.HtmlControls;

public partial class TimerUpdate3 : Page
{
  protected void Timer1_Tick(object sender, EventArgs e)
  {
    Label1.Text = "Refreshed at " + DateTime.Now.ToLongTimeString();
    int sec = DateTime.Now.Second;

    for (int i = sec ; i < sec + 20; i++)
    {
        HtmlTableRow row = new HtmlTableRow();
        row.Attributes.Add("onmouseover", "style.backgroundColor='#BFCBD6'");
        row.Attributes.Add("onmouseout", "style.backgroundColor='white'");
        row.Attributes.Add("onmouseup", "javascript:showMessage('row " + i + "')");
        Incidents.Rows.Add(row);

        HtmlTableCell cell3 = new HtmlTableCell("td");
        cell3.InnerText = "row - " + i;
        row.Cells.Add(cell3);

        HtmlTableCell cell1 = new HtmlTableCell("td");
        cell1.InnerText = "foo";
        row.Cells.Add(cell1);

        HtmlTableCell cell2 = new HtmlTableCell("td");
        cell2.InnerText = "poo";
        row.Cells.Add(cell2);
    }
  }  
}

При запуске сайта в Visual Studio я вижу множество script block файлов, добавляемых под TimerUpdate3.aspx файл.Каждый из них содержит функцию onmouseup.Эти файлы складываются, пока весь сайт не застрянет.
Если я закомментирую строку, которая добавляет атрибут onmouseup в строку - все отлично.
Что я здесь не так делаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...