Como atualizo a página no ASP.NET? (Deixe-se recarregar por código)


158

Como atualizo uma página no ASP.NET? (Deixe-se recarregar por código)

Prefiro não usar o Response.Redirect () porque não sei se a página estará, pois ela está dentro de um controle de usuário dentro de uma webpart dentro do sharepoint.


2
Eu não sou OP, mas uma razão pode ser porque o JavaScript pode ser desativado
Nathan Koop

11
ASP.NET depende de javascript, por isso, se um usuário tem o JavaScript desativado há um problema maior ...
jrummell

Respostas:


45

Depois que a página é renderizada para o cliente, você tem apenas duas maneiras de forçar uma atualização. Um é Javascript

setTimeout("location.reload(true);", timeout);

A segunda é uma meta tag:

<meta http-equiv="refresh" content="600">

Você pode definir os intervalos de atualização no lado do servidor.


onde devo colocar o setTimeout?
Siti

Consulte a resposta de @gaurav abaixo para obter uma boa maneira de fazer isso no .NET usando Server.TransferRequest.
precisa saber é o seguinte

Isso pode estar correto para uma página que não esteja usando o suporte do servidor, mas está errado em relação ao .Net especificado. A maneira correta é usar o Response.Redirect.
Phill Healey

394

Nos meus controles de usuário, depois de atualizar os dados, faço:

  Response.Redirect(Request.RawUrl);    

Isso garante que a página seja recarregada e funciona bem com um controle de usuário. Você usa RawURL e não Request.Url.AbsoluteUripreserva nenhum parâmetro GET que possa ser incluído na solicitação.

Você provavelmente não deseja usar __doPostBack:, já que muitas páginas aspx se comportam de maneira diferente ao fazer um postback.


4
@chris você usaria um segundo parâmetro como Response.Redirect (Request.RawUrl, false)? Aparentemente, é a melhor prática ao usar reponse.redirect. O que você acha?
Aleafonso

@ aleafonso: Eu nunca usei pessoalmente o segundo parâmetro e nunca tive problemas como conseqüência, por isso não tenho certeza do que ele compra. Mas sim, de acordo com a documentação, você deve usar um segundo parâmetro, mas apenas se você chamar o CompleteRequest - com o qual nunca me incomodei.
Chris

Às vezes, você pode precisar do AbsoluteUri, quando a página atual possui um parâmetro Id (como um questionId aqui no stackoverflow). Ou eu estou errado?
CularBytes 5/05

2
@aleafonso está certo - a menos que você precise interromper todo o processamento na página, o que às vezes é indicativo de um planejamento incorreto do projeto, você deve passar um false como o segundo parâmetro. Não passar o segundo parâmetro ou passar true lança uma HttpException e pode afetar o desempenho e preencher os logs de eventos.
Ripside 23/05

45

Pode ser tarde, mas espero que ajude alguém que está procurando a resposta.

Você pode usar a seguinte linha para fazer isso:

Server.TransferRequest(Request.Url.AbsolutePath, false);

Tente evitar o uso Response.Redirect, pois aumenta as etapas do processo. O que ele realmente faz é:

  1. Envia de volta a página com o cabeçalho de redirecionamento
  2. O navegador redireciona para o URL de destino.

Como você pode ver, o mesmo resultado leva 2 viagens em vez de 1 viagem.


2
+1 por apontar que Server.Transfer () é uma forma mais eficiente do que Response.Redirect ()
Jenny O'Reilly

Isso funcionou nos casos em que o Response.Redirect não funcionou corretamente.
Ed Bayiates 03/12/2015

Descobri que isso não limpa o estado das páginas, por exemplo, o conjunto .Textem a TextBoxou o .Visiblestatus de a Button.
Cloud

38

Tente o seguinte:

Response.Redirect(Request.Url.AbsoluteUri);

1
Ela só vai enviar uma página de redirecionamento em vez da página, causando um loop que o navegador irá parar quando ele vê que ela nunca vai ficar uma página real ...
Guffa

2
@ Guffa que depende totalmente do contexto em que o redirecionamento é usado. Se for usado em um bloco de ação / código chamado especificamente com base em uma ação ou condição, ele será acionado apenas uma vez a cada iteração e se codificado corretamente de forma isolada.
precisa

Isso pode resultar na perda de dados da sessão após o redirecionamento. Há algo sobre URLs totalmente qualificados que atrapalha as sessões.
Chris Cudmore

13

Use o método location.reload () do javascript .

<script type="text/javascript">
  function reloadPage()
  {
    window.location.reload()
  }
</script>

8

Existem vários métodos para atualizar a página no asp.net como ...

Script Java

 function reloadPage()
 {
     window.location.reload()
 }

Código por trás

Response.Redirect(Request.RawUrl)

Meta Tag

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

Redirecionamento de página

Response.Redirect("~/default.aspx"); // Or whatever your page url

6

Se você não deseja fazer uma atualização completa da página, que tal agrupar o que deseja atualizar dentro de um UpdatePanel e executar uma postagem assíncrona?


3

Pessoalmente, preciso garantir que a página mantenha o estado, para que todas as caixas de texto e outros campos de entrada mantenham seus valores. ao fazer a atualização meta, é como uma nova postagem, o IsPostBack é sempre falso, portanto todos os seus controles estão no estado inicializado novamente. Para manter o estado, coloque isso no final de seu Page_Load (). crie um botão oculto na página com um evento conectado, algo como butRefresh com o evento butRefresh_Click (...). Esse código define um cronômetro na página para disparar uma postagem, assim como um usuário clicou no botão de atualização. todo estado e sessão são mantidos. Aproveitar! (PS, pode ser necessário colocar a diretiva no cabeçalho @Page EnableEventValidation = "false" se você receber um erro na postagem.

//tell the browser to post back again in 5 seconds while keeping state of all controls
ClientScript.RegisterClientScriptBlock(this.GetType(), "refresh", "<script>setTimeout(function(){ " + ClientScript.GetPostBackClientHyperlink(butRefresh, "refresh") + " },5000);</script>");

2

Você não pode fazer isso. Se você usar um redirecionamento (ou qualquer outra técnica de servidor), nunca enviará a página real ao navegador, apenas páginas de redirecionamento.

Você deve usar uma metatag ou JavaScript para fazer isso, para poder recarregar a página depois que ela for exibida por um tempo:

ScriptManager.RegisterStartupScript(this, GetType(), "refresh", "window.setTimeout('window.location.reload(true);',5000);", true);

2

No seu page_load, adicione isto:

Response.CacheControl = "no-cache";
Response.AddHeader("Pragma", "no-cache");
Response.Expires = -1;

1
Response.Write("<script>window.opener.location.href = window.opener.location.href </script>");

1

Você pode usar 2 maneiras para resolver este problema: 1) Após o cabeçalho

<head> 
<meta http-equiv="refresh" content="600">
</head>

2) Se sua página não tiver tag de cabeçalho, você deve usar Javascript para implementar

<script type="text/javascript">
  function RefreshPage()
  {
    window.location.reload()
  }
</script>

Meu contato:

http://gola.vn


1

A única maneira correta de atualizar a página foi através do JavaScript, muitas das principais respostas do .NET falharam para mim.

Response.Write("<script type='text/javascript'> setTimeout('location.reload(true); ', timeout);</script>");

Coloque o código acima no evento de clique no botão ou em qualquer lugar que você queira forçar a atualização da página.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.