Обновить только указанное место на сайте asp.net (обновленный код) не работает - PullRequest
0 голосов
/ 29 сентября 2011

Я хочу загружать страницу каждые 5 секунд, поэтому у меня в голове это содержимое

<meta http-equiv="refresh" content="5" />    

Из-за этого обновляется вся страница. Я просто хочу обновить вид сетки и график, который у меня есть на странице. Как я могу сделать это, не обновляя всю страницу.

  <asp:ToolkitScriptManager ID="ToolkitScriptManager1" EnablePageMethods="true" EnablePartialRendering="True"
            runat="server">
        </asp:ToolkitScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
            <ContentTemplate>
    <div id="pie">
         <canvas width="125" height="450" id="progress1">[No canvas support]</canvas>
         <canvas id="pie1" position="relative" width="400" height="400">[No canvas support]</canvas>
    </div>
    <asp:Panel runat="server" ID="Panel_Users">
       <asp:GridView ID="Grid_UserTable" runat="server" 
                    OnRowDataBound="MyGrid_RowDataBound">
       <Columns>          </Columns>
       </asp:GridView>
    </asp:Panel>
 <asp:Timer ID="TimerClickEvent" runat="server" Interval="4000" ontick="TimerClickEvent_Tick"></asp:Timer>
   </ContentTemplate>
        </asp:UpdatePanel>

  protected DateTime LastUpdate
    {
        get
        {
            return (DateTime)(ViewState["LastUpdate"] ?? DateTime.Now);
        }
        set
        {
            ViewState["LastUpdate"] = value;
        }
    }

    protected void TimerClickEvent_Tick(object sender, EventArgs e)
    {
        if (LastUpdate.AddSeconds(5.0) < DateTime.Now)
        {
            UpdatePanel1.Update();
            LastUpdate = DateTime.Now;
        }
    }
protected void Page_Load(object sender, EventArgs e)
    {
        ToolkitScriptManager1.RegisterAsyncPostBackControl(TimerClickEvent);
        if (!IsPostBack)
        {
            LastUpdate = DateTime.Now;
        }}

Не перезагружается. где я иду не так

Ответы [ 3 ]

3 голосов
/ 29 сентября 2011

Поместите панель внутри UpdatePanel и используйте метод updatePanelID.Update (), чтобы обновить обновление Panel, содержащей GridView. См. это для более подробной информации

Вместо события нажатия кнопки можно использовать таймер .

1 голос
/ 29 сентября 2011

Для встроенного решения asp.net используйте <asp:UpdatePanel> вместе с элементом управления <asp:Timer>.

Настройте панель обновления на обновление, основываясь на событии Timers Tick.Тогда это будет только обновлять контент на панели обновлений.

ОДНАКО, это быстрое и грязное решение (на мой взгляд), потому что, хотя контент на странице обновляется только на панели обновлений, вся страницафактически отправляется обратно каждый раз, и все, что находится внутри метода Page_Load, будет обрабатываться снова.

Другим решением будет использование некоторого javascript ajax и обновление только того, что вам нужно обновить.Отличная библиотека javascript, которая поможет вам в этом, - это jQuery, а затем используйте функции AJAX.Это позволит вам перезагрузить области, которые вам нужны, и даст вам намного больший контроль над происходящим.

Я бы забыл об AJAX Control Toolkit и больше посмотрел бы на jQuery Ajax и jQuery UI.

1 голос
/ 29 сентября 2011

Если вы хотите обновить только регион, есть 2 варианта:

  • загрузите это в <iframe> и позвольте ему делать что угодно (через мета-обновление документа внутри <iframe>
  • перезагрузите затронутую область с помощью javascript, возможно, метода jQuery .load(), т.е. $('#id').load(url);

Мета-обновление на всей странице, при необходимости, перезагрузит всю страницу.

...