Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
621
Assunto : ASP.NET
Titulo: Importantes truques com o LoadControl

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Em uma dica anterior citamos algumas vantagens do uso do loadcontrol para carregar web user control dinamicamente, em http://www.bufaloinfo.com.br/dicas.asp?cod=597

Mas existem alguns detalhes a mais sobre o funcionamento do método loadcontrol. Quando o user control possui cache habilitado (@outputcache) o objeto retornado pelo método loadControl não é um objeto User Control mas sim um PartialCachingControl.

De acordo com sua definição o LoadControl retorna um Control. Tanto UserControl como PartialCachingControl herdam características de Control, mas UserControl não possui uma relação direta com PartialCachingControl.

E que problemas isso pode nos causar ?

Se estivermos utilizando diretamente o controls.add da página, nenhum, pois o controls.add aceita ambos os tipos de componente. Mas se estivermos tentando manipular o UserControl para alguma coisa teremos problema. Vamos supor que temos um user control chamado titulo.ascx, veja este exemplo :

dim titulo1 as titulo

titulo1=loadcontrol("titulo.ascx")
titulo1.umvalorqualquer="qualquercoisa"
page.controls.add(titulo1)

Se titulo.ascx não estiver utilizando cache, tudo funcionará corretamente. Mas se titulo.ascx estiver usando o controle de cache teremos um erro. O loadcontrol devolverá um objeto do tipo PartialCachingControl, que não é compatível com o tipo Titulo, que herdou características de user Control, por isso tudo falha (specified cast not valid).

Então para resolver este problema temos que tratar a possibilidade de estarmos recebendo um PartialCachingControl. Este objeto possui uma propriedade chamada CachedControl que contém uma referência para o controle em questão, Titulo neste exemplo.

Mas existem alguns pequenos truques para o uso da propriedade CachedControl. O primeiro está bem documentado : Nem sempre ela vai voltar um objeto. Quando pelas regras do sistema de cache o controle estiver sendo obtido do cache e não processado, não existe instancia do controle e essa propriedade estará retornando nothing.

O segundo truque não é documentado. CachedControl só poderá retornar uma referencia a um objeto depois do objeto haver sido processado. Antes disso sempre retornará nothing. O processamento do objeto é justamente causado pelo Controls.add da página.

Então o código, anteriormente simples, tem agora que prever todas essas possibilidades. Veja como fica o código :

dim obj as control
dim titulo1 as titulo

obj=loadcontrol("titulo.ascx")
page.controls.add(obj)

if typeof obj is PartialCachingControl then
titulo1=obj.CachedControl
else
titulo1=obj
end if
if not isnothing(titulo1) then
titulo1.umvalorqualquer="qualquercoisa"
end if


Observem os IFs que fizemos para contornar a questão do tipo de dados e a possibilidade do controle estar em cache e voltar nothing...



Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br