Evitando refresh com Update Panel

oraculum

Tagged: ,


Bem usei por um bom tempo a dica que consta no tutorial do Jared que a pouco descobri no Búfalo Info também, neste ultimo em português e melhor explicado, já está até adicionado no meu opera link :) portanto meu objetivo aqui não é duplicar o que já existe, mas apenas aprimorar, se você quiser saber mais da solução clique no link anterior.

Bem acontece que nessa solução apresentada por Jared existe um problema que quando usamos o updatepanel ele não faz a atualização do campo hidden, porque o hidden está fora do panel, então como estou com um pouco de pressa eu resolvi fazer uma cambiarrinha ao invés de incrementar o hidden eu vou retirar uma unidade do session, para isso adicione o código abaixo na classe ticket.cs:

1
2
3
4
5
6
7
8
9
10
11
12
    public void UpdatePanelAcertoTicket()
    {
        if ((System.Web.HttpContext.Current.Session["LastTicket"] == null))
        {
            System.Web.HttpContext.Current.Session["LastTicket"] = 1;
        }
        else
        {
            int i = int.Parse(System.Web.HttpContext.Current.Session["LastTicket"].ToString()) - 1;
            System.Web.HttpContext.Current.Session["LastTicket"] = i.ToString();
        }
    }

Depois disso é só quando você for fazer uma operação com updatepanel você chamar o método no final:

1
2
        Ticket tkt = new Ticket();
        tkt.UpdatePanelAcertoTicket();

Veja o código do Bufalo Info em C#

Classe Ticket.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
 
public class Ticket
{
	public Ticket()
	{
 
    }
 
    public String NextTicket()
    {
        if ((System.Web.HttpContext.Current.Session["LastTicket"] == null))
        {
            System.Web.HttpContext.Current.Session["LastTicket"] = 1;
        }
        else
        {
            int i = int.Parse(System.Web.HttpContext.Current.Session["LastTicket"].ToString()) + 1;
            System.Web.HttpContext.Current.Session["LastTicket"] = i.ToString();
        }
 
        return System.Web.HttpContext.Current.Session["LastTicket"].ToString();
    }
 
    public String LastTicket()
    {
 
        if ((System.Web.HttpContext.Current.Session["LastTicket"] != null))
        {
            return System.Web.HttpContext.Current.Session["LastTicket"].ToString();
        }
        else
        {
            System.Web.HttpContext.Current.Session["LastTicket"] = 0;
            return ("0");
        }
    }
 
    public void UpdatePanelAcertoTicket()
    {
        if ((System.Web.HttpContext.Current.Session["LastTicket"] == null))
        {
            System.Web.HttpContext.Current.Session["LastTicket"] = 1;
        }
        else
        {
            int i = int.Parse(System.Web.HttpContext.Current.Session["LastTicket"].ToString()) - 1;
            System.Web.HttpContext.Current.Session["LastTicket"] = i.ToString();
        }
 
    }
}

Classe libNotRefresh.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
 
 
public class libNotRefresh:  System.Web.UI.Page
{
	public libNotRefresh()
	{
 
	}
 
    bool _isRefresh = false;
 
    public bool isRefresh
    {
        get { return (_isRefresh); }
    }
 
    // incluindo um campo hidden chamado __ticket na pagina esse campo é usado
    // para saber se o usuario fez um refresh na pagina.
    protected override void OnPreRender(System.EventArgs e)
    {
        Ticket clsTicket = new Ticket();
        ClientScript.RegisterHiddenField("__Ticket", clsTicket.NextTicket());
        base.OnPreRender(e);
    }
 
 
    // No método onInit comparamos o valor existente em sessão com o valor 
    // recebido via campo hidden. Se o valor no campo hidden for menor que o 
    // contido em sessão então ocorreu um refresh.
    protected override void OnInit(System.EventArgs e)
    {
        int TickAtual = 0;
        int UltimoTick = 0;
 
        _isRefresh = false;
 
        Ticket clsTicket = new Ticket();
        UltimoTick = int.Parse(clsTicket.LastTicket());
 
        if ((Request.Form["__Ticket"] == null))
        {
            TickAtual = 0;
        }
        else
        {
            TickAtual = int.Parse(Request.Form["__Ticket"]);
        }
 
        if (TickAtual < UltimoTick)
        {
            _isRefresh = true;
        }
 
        base.OnInit(e);
    }
 
 
}
Share Button

Leave a Reply