Controlando o estado de exibição
Páginas da Web do Microsoft ASP.NET são capazes de manter seu próprio estado entre viagens de ida e volta.Quando uma propriedade é definida para um controle, o ASP.NET salva o valor da propriedade sistema autônomo parte do estado do controle.Para o aplicativo, dessa maneira, aparecem o tempo de vida da página se estender por várias solicitações do cliente.Este estado de nível de página é conhecido sistema autônomo estado de exibição da página.
Em páginas da Web ASP.NET comuns, estado de exibição é enviado pelo servidor sistema autônomo um campo oculto em um formulário sistema autônomo parte da resposta ao cliente e retornado para o servidor pelo cliente sistema autônomo parte de um postback.No entanto, para reduzir a demanda de largura de banda ao usar os controles móveis, ASP.NET não envia estado de exibição da página para o cliente.Em vez disso, o estado de exibição é salvo sistema autônomo parte de uma sessão de usuário no servidor.Onde não há um estado de exibição, ASP.NET envia um campo oculto que identifica o estado de exibição da página nesta sistema autônomo parte de cada resposta ao cliente e o campo oculto é retornado para o servidor pelo cliente sistema autônomo parte do próximo postback.
Gerenciamento de histórico de estado de exibição
Porque o estado de exibição de uma determinada página deve ser mantido no servidor, se o usuário clicar Fazer backup botão, é possível para o estado corrente do servidor para ficar fora de sincronização com a página corrente do navegador.For example, suppose the user goes to Page 1, then clicks a button to go to Page 2, then presses Backto return to Page 1.A página corrente no navegador agora é página 1, mas o estado corrente no servidor é que a página 2.
Para resolver esse problema, páginas da Web móveis ASP.NET manter um histórico das informações do estado de exibição na sessão do usuário.Cada identificador enviada ao cliente corresponde a uma posição nesse histórico.No exemplo anterior, se o usuário publica novamente de página 1, a página da Web móvel usa o identificador salvo com página 1 para sincronizar Exibir histórico de estado.
Você pode configurar o dimensionar desse histórico para aprimorá-lo para o aplicativo.O dimensionar padrão é 6 e pode ser alterado adicionando um atributo numérico a uma marca no arquivo Web.config, sistema autônomo mostrado no exemplo a seguir:
<configuration>
<system.web>
<mobileControls sessionStateHistorySize="10" />
</system.web>
</configuration>
Gerenciando sessões expiradas
Como estado de exibição é salvo na sessão do usuário, é possível para o estado de exibição expirar se uma página não estiver disponível novamente dentro do time de expiração de sessão.Este expiração é exclusiva para páginas da Web móveis.Quando o usuário posta uma página para o qual não haja nenhum estado de exibição disponível, a OnViewStateExpire método da página é chamado. A implementação padrão desse método lança uma exceção indicando que o estado de exibição tenha expirado.No entanto, se seu aplicativo for capaz de restauração o estado de exibição manualmente após a expiração, você pode substituir esse método no nível da página e optar por não chamar a implementação base.
Ativando e desativando o estado de exibição
A vantagem de usar a sessão para gerenciar estado de exibição é que resultados em um dimensionar menor de resposta.A desvantagem é que o uso ineficiente da sessão de estado pode levar a um desempenho inferior.Se você usar controles que contêm grandes quantidades de dados, você pode melhorar a eficiência com técnicas sistema autônomo paginação ou desativar o estado de exibição personalizado.Por exemplo, considere um site que exibe notícias.Em vez de salvar o conteúdo do artigo para cada sessão de usuário, o site pode usar o acesso de dados mais inteligente para que somente uma cópia de cada artigo armazenadas em cache no servidor e uso de estado de sessão é minimizado.
Para desabilitar o estado de exibição de um controle e seus filhos, conjunto o EnableViewState propriedade do controle para false. Para desabilitar o estado de exibição de uma página inteira, defina o EnableViewState atributo das @ Page diretiva false.
Alguns controles móveis, mesmo quando o estado de exibição está desabilitado, salvar informações de estado essenciais entre cliente viagens de ida e volta.Um exemplo de tais informações inclui o formulário ativo no momento em uma página.Quando você desativa o estado de exibição, a página salva essas informações essenciais sistema autônomo uma variável de formulário oculto que é enviada em uma viagem de ida e volta ao cliente.
Gerenciamento de cookies e estado do cliente
Por padrão, os recursos de gerenciamento de sessão do ASP.NET requerem que o servidor para gravar um cookie de sessão para um cliente.O cliente, em seguida, envia o cookie em cada solicitação durante a sessão e o servidor pesquise informações sobre estado de sessão usando as informações de cookie.No entanto, muitos dispositivos móveis não oferecem suporte a cookies.Para o gerenciamento de sessão (incluindo o estado de exibição), para funcionar corretamente nesses dispositivos, configurar o aplicativo para usar o gerenciamento de sessões cookieless.Com esse recurso ativado, o ASP.NET insere automaticamente a chave de sessão em URLs de aplicativo.
Alguns dispositivos não oferecem suporte a cookies.Para persistir o estado do cliente a longo prazo, um aplicativo pode usar informações específicas do cliente, sistema autônomo um número de cliente inserido pelo usuário.Porque você não pode contar com um cliente precisar cookies, o seu aplicativo deve leva a uma página alternativa que pode ser marcada.O exemplo a seguir mostra um exemplo.Os usuários que navegar para esta URL exibir um formulário que eles inserem sua IDs do cliente.O aplicativo, em seguida, exibe um URL alternativo, quais usuários podem marcar.
<%@ Page Inherits="System.Web.UI.MobileControls.MobilePage"
Language="C#"
EnableViewState="false" %>
<script language="c#">
protected void Page_Load(Object sender, EventArgs e)
{
String customerID = Request.QueryString["cid"];
if (customerID != null)
{
// A customer ID was found. Simulate a lookup by
// converting the client ID back to a user.
int underscore = customerID.IndexOf('_');
if (underscore != -1)
{
// If visiting the first time, prompt the user to bookmark.
if (Session["FirstTime"] != null)
{
Session["FirstTime"] = null;
WelcomeLabel.Text = String.Format("Welcome, {0}",
customerID.Substring(0, underscore));
ActiveForm = WelcomeForm;
}
else
{
ReturnLabel.Text = String.Format("Welcome back, {0}",
customerID.Substring(0, underscore));
ActiveForm = ReturnForm;
}
}
}
}
protected void LoginForm_OnSubmit(Object sender, EventArgs e)
{
// Generate a customer ID. Normally, you would create
// a new customer profile.
String customerID = CustomerName.Text + "_" +
System.Guid.NewGuid().ToString();
String path = AbsoluteFilePath + "?cid=" +
Server.UrlEncode(customerID);
Session["FirstTime"] = true;
RedirectToMobilePage(path);
}
</script>
<mobile:Form >
<mobile:Label StyleReference="title">
Welcome to the site. Please register to continue.
</mobile:Label>
<mobile:TextBox id="CustomerName" />
<mobile:Command OnClick="LoginForm_OnSubmit"
Text="Register" />
</mobile:Form>
<mobile:Form id="WelcomeForm" >
<mobile:Label id="WelcomeLabel" />
Please bookmark this page for future access.
</mobile:Form>
<mobile:Form id="ReturnForm" >
<mobile:Label id="ReturnLabel" />
</mobile:Form>
Otimização do estado de exibição para aplicativos móveis
Para páginas da Web móveis, as seguintes considerações são importantes:
Salvar estado de exibição no estado de sessão é altamente otimizada.Se não há nenhum estado de exibição para salvar, nada é armazenado na sessão e nenhum identificador é enviada ao cliente.No entanto, os desenvolvedores de aplicativos que desejam evitar o uso de gerenciamento de sessão, ou para aqueles que querem páginas capaz de alto throughput, podem considerar reduzindo ou eliminando o uso do estado de exibição.Em muitos casos de aplicativo (por exemplo, uma página de texto formatado de renderização), modo de exibição de estado é desnecessário e é melhor é desativada.
Além de estado de exibição do aplicativo, uma página da Web móvel deve armazenar outros tipos de informações de estado sobre a página.Essas informações podem incluir as informações de formulário ou de paginação ativas sobre o formulário.Essas informações é sempre enviadas ao cliente em vez de mantidas no servidor e normalmente é gerado de forma otimizada.Por exemplo, se o primeiro formulário estiver ativo ou a primeira página de um formulário está sendo mostrada, essas informações não são salvas, pois esses são estados padrão.Essas informações de estado são chamadas o estado de exibição particular.Todos os controles podem substituir o LoadPrivateViewState e SavePrivateViewState métodos para ler e gravar o estado de exibição particular.
Observação: Uma mercadoria prática de segurança exige que, se você incluir informações confidenciais no estado de sessão, você usa uma conexão com a autenticação HTTPS e SSL/TLS.
Consulte também
Conceitos
Visão Geral sobre o Gerenciamento de Estado do ASP.NET
Referência
Outros recursos
Com suporte para o estado de exibição
Criando páginas de Web móveis do ASP.NET