Que controla ter ViewState mantida?
Pergunta
Eu estou tentando envolver minha cabeça em torno da infra-estrutura de controle para entender quais ASP.NET mantém o estado de exibição para o.
Não são estes regulares controles HTML ex:
<input type="radio" checked="checked"/>
-> Eu entendo estes não têm viewstate
Depois, há controles HTML com runat = "server"
<input type="radio" checked="checked" runat="server"/>
-> Será que o viewstate se mantido entre postbacks
Depois, há controles ASP.NET
<asp:TextBox id="txtMyText" runat="server"/>
-> Eu entendo estes têm viewstate
Nós temos alguns controles personalizados que herdam HtmlTextBox
<myPrefix:myTextBox id="txtMyText" runat="server"/>
-> É o mesmo como tipo 2 acima
É seguro assumir que qualquer controle com tag runat="server"
terá viewstate mantida?
Solução
Existem 3 tipos de controles, os elementos HTML padrão, como, controles de servidor HTML que têm a tag runat = servidor adicionado e controles web completas. Somente os controles da web têm viewstate mantida.
Outras dicas
Quando estávamos tendo problemas com viewstate eu comecei a usar o software helper Viewstate de Binary Fortress http : //www.binaryfortress.com/aspnet-viewstate-helper/
Ela dá-lhe uma visão real sobre o que está acontecendo -, bem como ajudar com problemas de desempenho relacionados viewstate pode decodificar o viewstate com um clique e ver o que está realmente lá - assim que você começa a entender o que os controles estão usando viewstate e que não são, e exatamente o que eles estão armazenando lá.
Além disso, algo que ninguém tenha mencionado é ControlState. Isto veio junto com ASP.NET 2 e teoria é que as coisas importantes que é necesssary para um controle para a função vai para o estado de controlo, e os dados etc no viewstate, para que possa desligar o viewstate e vincular os dados para o seu controle sobre cada nova postagem e o controle ainda funciona basicamente usando ControlState. Eu digo "teoria" porque, na prática a implementação parece irregular. Quando você olhar para o código dropdownlist usando reflector, por exemplo, isso não é devidamente aplicada. Isso pode ter mudado com versões posteriores do quadro, eu não tenho certeza. Muita informação sobre ControlState lá fora, se você procurar por ele, eu apenas pensei que eu iria falar dele.
afaik não, que os controles HTML não são projetados para manter tudo no viewstate, se você se preocupa com isso, tomar as webcontrols.
Qualquer coisa que você colocar em vista da sua página e adicionar o runat = "server" terá o viewstate mantida.
Como para controles adicionados dinamicamente, isso depende de quando e como você adicionar o controle para a árvore de controle. Confira a resposta aceita a esta questão , mas também verificar fora minha pergunta aqui .