Como faço para implementar o / Get padrão Post / Redirect no asp.net WebForms?
-
06-09-2019 - |
Pergunta
Então, eu entendo o básico do padrão prg. Mas eu não vim através de uma técnica para fazer dados arbitrários disponíveis para a "pegar" instância de uma página.
Por exemplo, eu poderia querer exibir diferentes mensagens de feedback para o usuário, dependendo de sua ação que iniciou a postagem.
O que eu tenho feito é o envio de um identificador como um parâmetro de string de consulta. Isso funciona bem mas introduz questões bookmarking e não parece como seria escalar muito bem. E se eu precisava para enviar todo o ViewState?
Infelizmente, eu estou amarrado a WebForms no momento e não ter sido capaz de convencer minha organização a migrar para MVC.
Solução
Se os campos POSTed estão sendo persistiu antes do redirecionamento e você precisa acessar os dados após o redirecionamento, gostaria de acrescentar o identificador para o registro de dados (s) na cadeia de consulta como você menciona. Você também pode especificar um status para a solicitação (para a exibição de mensagens, etc.). Em seguida, na página GET você pode ler os dados e fazer tudo com ele.
Eu não vejo outra maneira de contornar este problema como cada página obtida por GET não terá acesso a da página anterior ViewState
etc.
Usando Server.Transfer
terá o mesmo efeito que manusear o POST na página original.
Você pode usar variáveis ??de sessão para armazenar os dados POST, mas que fede.
Outras dicas
Eu acho que você ainda pode usar o método get no elemento de formulário. Neste caso, você não será capaz de usar o ID de seu controle de maneira normal. Mas você pode usar a coleção Request.Params para obter o estado de visualização.
Atualização: Desculpe, eu apenas tentei novamente. e descobri que você pode acessar seu controle servidor por seu ID no codebehind. como:
Response.Write(text1.Text)
veja o exemplo:
A página aspx (apenas o elemento de formulário):
< form id="form1" runat="server" method="get">
< div>
< asp:TextBox ID="text1" runat="server" />
< asp:Button ID="button1" runat="server" OnClick="buttonClick" />
< div>
< form>
NOTA: Eu usei um espaço antes de cada "<" caso contrário, o código acima não será visível.
o código por trás da página (único botão clique evento):
protected void buttonClick(object sender, EventArgs e)
{
string text = Request.Params["text1"];
Response.Write(text);
}
Quando você clica no botão a url será parecido com este: