Posso utilizar ViewState para eliminar a necessidade de passar uma seqüência de consulta?
Pergunta
Eu tenho uma página com várias listas expansíveis. Em um mundo perfeito, eu gostaria de exibir links para cada uma dessas listas e quando um é clicado ele irá recarregar a página com a lista específica exibida. Eu li que ViewState pode eliminar a necessidade de campos de entrada ocultos, seqüências de consulta, etc, mas eu não estou familiarizado com o conceito.
Basicamente eu preciso para realizar duas coisas:
- Adicionar ID de lista para ViewState obj quando o link é clicado
- Leia ID de ViewState obj quando a página é carregada, exibição que lista ??li>
Alguém pode me fornecer alguns recursos e / ou ajuda sobre este tema? Obrigado!
Solução
ViewState é essencialmente um campo escondido longa codificado, armazenado no topo de sua página. A principal diferença entre isso e um campo oculto regular é que ASP .NET irá decodificá-lo e analisá-lo automaticamente em uma nova postagem.
Existem melhores maneiras de conseguir o que você quer fazer.
- Você pode usar o querystring. Tudo o que você está passando é um ID lista. Acrescente o ID da lista até o fim de seus links, e olhar para ele sobre Page_Load. Carregar a lista apropriada se você encontrá-lo. Você vai querer lidar com o caso em que um ID da lista não é passado. A querystring não é mau . Ele pode dramaticamente ajudar a reduzir o peso da página. Quando usado com um decente URL banner , você terá um monte de controle sobre o que se passou (e crucialmente, que não funciona)
- Se você estiver usando controles ASP .NET (como Botão ou LinkButton) para acionar a exibição de uma lista, você pode definir a propriedade CommandArgument e pegá-lo no código de evento. Você pode então passar este como um parâmetro para qualquer método ou Control está a lidar com sua lista de renderização.
Outras dicas
ViewState é usado para armazenar informações em uma única página entre costas post, não passar argumentos entre as páginas.
Você pode passar argumentos entre as páginas usando:
- Session
- string de consulta ??li>
- Os cookies
- Banco de dados personalizado
- Cross-página postbacks
Nenhum desses métodos irá adicionar automaticamente os dados para o ViewState da página que está sendo solicitado. Desses, acredito única # 2 funciona com links HTML retas (GET), o resto geralmente envolvem uma nova postagem (POST).
Você sempre vai precisar de algum tipo de ViewState setter ( ViewState [ "Id"] = source.Id ) na página solicitada.