Pergunta

Eis a situação: Eu tenho conjunto de texto de um rótulo, imediatamente seguido por uma chamada response.redirect () da seguinte forma (isto é apenas um exemplo, mas eu acredito que descreve a minha situação com precisão):

aspx:

<asp:Label runat="server" Text="default text" />

Código-behind (código chamado em um evento onclick):

Label.Text = "foo";
Response.Redirect("Default.aspx");   

Quando a página é processada, o rótulo diz "texto padrão". O que eu preciso fazer diferente? Meu entendimento era que tais mudanças seriam feitas automaticamente nos bastidores, mas, aparentemente, não neste caso. Obrigado.

Para um pouco de fundo extra, o código-behind trecho é chamado dentro de um método que é invocado sobre um evento onclick. Há mais do que isso, mas eu incluído apenas o que é de interesse para esta questão.

Foi útil?

Solução

Depois de um redirecionamento você vai perder qualquer informação de estado associada a seus controles. Se você simplesmente deseja que a página para atualizar, remover o redirecionamento. Depois que o código terminar a execução, a página será atualizada e qualquer estado será mantido.

Nos bastidores, isso funciona porque ASP.NET escreve as informações de estado de um campo de entrada oculto na página. Quando você clica em um botão, o formulário é publicado e ASP.NET decifra o viewstate. Seu código é executado, modificando o estado, e depois de que o estado é novamente escrito para o campo oculto eo ciclo continua, até que você alterar a página sem um POST . Isso pode acontecer quando clicar em um link para outra página, ou através Response.Redirect (), que instrui o navegador a seguir o url especificado.

Outras dicas

Uma chamada Response.Redirect pedirá navegador do usuário para carregar a página especificada no URL que você dá. Porque este é um novo pedido para a sua página na página utiliza o texto que está contido na sua marcação (como eu assumir que o texto do rótulo está sendo definido dentro de um manipulador de botão ou similar).

Se você remover a chamada Response.Redirect sua página deve funcionar como anunciado.

ASP e ASP.Net são inerentemente apátridas menos que estado é explicitamente especificado. Normalmente entre postbacks informações como o valor de uma etiqueta está contida no viewstate, mas se você mudar as páginas que viewstate é perdido porque é estava sendo armazenado em um campo oculto na página.

Se você quiser manter o valor da etiqueta entre as chamadas que você precisa usar um dos mecanismos estatais (por exemplo Session, Preferences) ou sistemas de comunicação (Request (GET, POST)).

Além disso, você pode estar à procura de Server.Transfer que irá mudar quem está processando a página nos bastidores. Response.Redirect é projetado para abandonar o seu contexto atual na maioria dos casos.

Para persistir o estado, usar Server.Transfer em vez de Response.Redirect.

Então, se me permite responder a minha própria pergunta (de acordo com o FAQ, que é incentivado), a resposta curta é, você não persistir o estado de exibição por meio de redirecionamentos. Ver estado é para postagens, não redireciona.

Bonus: Tudo que você sempre quis saber sobre o estado de exibição no ASP .NET , com fotos!

Por que vale a pena (e esperamos que ele vale alguma coisa), capítulo 6 do Pro ASP NET 3.5 em C # 2008, segunda edição é um recurso fantástico sobre o assunto. Todo o livro tem sido muito bem até agora.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top