Ingens Blog

.NET - Resolver la pérdida del ViewState al recorrer controles recursivamente

Jun 5, 2015 4:15:00 PM / by daniel.comas

 

 

Hoy os traemos una solución a un problema poco común en WebForms .NET. Tecnología que no se debería utilizar para empezar nuevos proyectos. Aún así hay infinitos proyectos hechos con ésta puesto que ha sido una tecnología muy estable.

 

 

Problemática

 

Webforms almacena un estado (viewstate) en los controles al hacer un refresco de página (postback) para no perder el texto en un campo, atributos, etc. Realmente siempre funciona bien excepto si en un momento del refresco de página invocamos a una función recursiva pasándole como parámetro un Control:

Public Shared Function FindControlRecursive(ByVal Root As Control, ByVal Name As String) As Control

If Root.ID = Name Then

Return Root

End If

Dim ctl As Control

For Each ctl In Root.Controls

If (Not IsNothing(FindControlRecursive(ctl, Name))) Then
Return FindControlRecursive(ctl, Name)
End If

Next

Return Nothing

End Function

 

Debido algún bug de webforms, esto acaba eliminado los viewstate.

 

 

Solución

 

La solución es en vez de recorrer con un control superior. Es recorrer con una colección de controles!

 

Public Shared Function FindControlRecursive(ByVal controls As ControlCollection, ByVal Name As String) As Control

For Each Control As Control In controls
If Control.ID = Name Then
Return Control
End If

If Control.HasControls Then
Dim resCtrl As Control = FindControlRecursive(Control.Controls, Name)
If Not resCtrl Is Nothing Then Return resCtrl
End If
Next

Return Nothing
End Function

 

 

Espero que os sea de utilidad!

 


Os dejo este enlace al foro de MSDN el cuál fue realmente útil para saber dónde estaba el problema:

http://forums.asp.net/t/1043999.aspx

 

 

Topics: ASP, .NET, Programación, Recursividad, Solucion, ViewState

daniel.comas

Written by daniel.comas

Subscribe to Email Updates

Lists by Topic

see all

Posts by Topic

See all

Recent Posts