Pergunta

Quais as opções que eu tenho para a criação de conteúdo dinâmico stateful em um site ASP.Net?

Aqui está meu cenário. Eu tenho um site que tem várias regiões de conteúdo, aninhadas. O nível superior são ações amarrado a uma funcional área Catalog, Subscriptions, Settings.

Quando você clica sobre a ação funcional, eu quero adicionar dinamicamente conteúdo específico para essa ação. Por exemplo, quando Catalog é clicado, eu quero mostrar uma árvore com as pastas de catálogo e arquivos, e uma região à direita para mais detalhes.

Quando um usuário clica na árvore, eu quero um contexto detalhes sensíveis a carga na região de detalhes (como propriedades ou opções para gerenciar os arquivos).


Eu comecei com UserControls. Eles trabalharam muito bem, enquanto eu mantive o carregamento tudo na página, e nunca deixe um desaparecer. Assim que um desaparecido, ViewState para a página explodiu porque a árvore do estado vista era inválido.

(eu não quero manter o material de carga na minha página, porque eu não quero as respostas para ser muito grande)

Assim, a minha próxima abordagem foi substituir meus regiões dinâmicas com IFrames. Então, em vez de instanciar um UserControl, gostaria apenas de mudar a fonte no meu IFrame. Desde o conteúdo do IFrames eram páginas independentes que eu não correr em quaisquer problemas ViewState.

Mas, eu estou preocupado que IFrames pode ser uma escolha de design ruim, mas não entendemos completamente por que. O site não é público, para que os motores de busca não são uma preocupação.


Então, finalmente, a minha pergunta.

Quais são as minhas opções para este cenário? Se eu escolher uma solução Ajax (jQuery), vou ter que manter meu próprio ViewState? Há outras considerações que devem ser levadas em conta?

Foi útil?

Solução

Algumas outras opções:

  1. O conteúdo só aparece para ser dinâmico. Você carrega controles suficientes na página para lidar com qualquer coisa e só realmente Mostrar o que você precisa. Isso economiza um monte de problemas mexer com o estado de exibição e tal, mas significa que a sua página tem uma pegada maior.
  2. Adicionar controles à página dinamicamente. Você já foi brincar com isso, então você já viu algumas das questões aqui. Basta lembrar que o lugar para criar seus controles dinâmicos para postbacks está no evento Page_Init (), e que, se você quer que eles sejam stateful, você precisa manter isso em algum lugar do estado. Eu recomendo um banco de dados.

Outras dicas

Os controles que são adicionados dinamicamente não persistem no viewstate, e esta é a razão que não importa se você usar AJAX ou iframe ou o que quer.

Uma solução alternativa possível é a de controles repovoar no postback. O problema com isso, é o ciclo de vida da página (simplificado) é:

  1. Inicializar
    • LoadViewState
    • Load Postback de dados
    • eventos controle de carga de chamadas
    • evento Load Chamada
    • eventos de controle de chamada
    • Controle PreRender
    • PreRender
    • SaveViewState
    • Descarregar

O que isto significa é o único lugar para re-adicionar seus controles dinâmicos é Inicializar - dados de outra forma destacados (ou informações viewstate) não é carregado para esse controle. Mas, muitas vezes, porque Viewstat / dados postback ainda não está disponível na inicialização, seu código não tem as informações necessárias para descobrir quais controles precisam ser adicionados.

A única outra solução alternativa que eu encontrei nesta situação é usar um controle 3o partido chamado DynamicControlsPlaceholder . Isso funciona muito bem, e persiste as informações de controle no estado de visualização.


No seu caso particular, não parece que há que as escolhas muitas / casos. É prático apenas para ter todos os diferentes conjuntos de controles na página, e colocá-los dentro de asp: controles de espaço reservado e, em seguida, um pouco conjunto para visível, dependendo do que for selecionado

você tem um número de opções diferentes, e sim, IFrames eram uma escolha de design ruim.

A primeira opção é a solução AJAX. E com isso não há realmente um cenário viewstate, é só você está passando para trás e para a frente de dados com o servidor web, a construção da interface do usuário em tempo real, conforme necessário.

A próxima opção é adicionar dinamicamente os controles que você precisa para um determinado post, everytime. A maneira como isso iria funcionar, é que no início do ciclo de vida da página, você precisaria para reconstruir a página exatamente como ele foi enviado pela última vez, e, em seguida, despejar todos os controles desnecessários, e construir apenas aqueles que querem .

Uma terceira opção seria a utilização de páginas mestras. Seu conteúdo nível superior poderia estar na página principal em si, e tem links para várias páginas dentro do site.

Estou certo dado tempo suficiente, eu poderia vir para cima com mais, mas estes 3 apareceu apenas de ler o seu problema.

controles dinâmicos e viewstate não se misturam bem, como mencionado acima - mas isso é uma coisa boa, porque mesmo que eles fizeram o viewstate para uma página dinâmica complexa iria ficar tão inchado que o desempenho diminuiria a zero

uso Ajax [I como AJAX PRO, pois é muito simples de usar] e gerir o estado da página se [em sessão, tabelas de banco de dados, ou o que funciona para o seu cenário]. Este será um pouco mais complicado para começar, mas os resultados vão ser eficiente e ágil: cada página pode atualizar apenas o que precisa mudar, e você não estará soprando um back corda viewstate gigante e para cá o tempo todo

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