Recién me preguntaron, como se podia modificar el acceso de un control dentro de un WebControl para que sea publico. Esta accion en Visual Studio 2003, era bastante simple, ya que simplemente modificabamos el atributo protected por public del mismo, en la sección Web Designer Generated Code Por ejemplo la declaracion de un TextBox;

 

  Protected WithEvents TextBox1 As System.Web.UI.WebControls.TextBox

 

 

Se modificaba por

 

  Public WithEvents TextBox1 As System.Web.UI.WebControls.TextBox

 

 

De esta manera, luego se podia acceder al control interno del WebControl desde la pagina que contenia al WebControl.

 

  Me.WebUserControl11.TextBox1.Text = "Hola"

 

 

Sin embargo, en Visual Studio 2005, esto no es posible ya que la clase de código asociado al WebControl es parcial y no contiene la definicion de los controles del WebControl (las definiciones se generan dinamicamente al momento de compilar). Esta caracteristica es nueva del compilador de ASP.NET 2.0.  El compilador de ASP.NET (aspnet_compiler.exe) fue introducido originalmente en ASP.NET 2,0 como manera totalmente de precompilar un sitio entero, permitiendo no desplegar nada salvo assemblies.  Esto es interesante porque elimina cualquier compilación a pedido cuando se hacen las peticiones, eliminando el primer post deployment.  Pero de esta manera también se hace más difícil que las modificaciones sean hechas a un sitio ya desplegado (puesto que no se puede editar archivos aspx y modificarlos).

El compilador liberado con ASP.NET 2,0 soporta este modelo de despliegue, pero lo también se ha modificado para soportar un modelo actualizable del despliegue.  Este modelo es posible debido a la reintroducción de la herencia en el modelo del codebehind, para poder ser generado y compilar las clases parciales del WebControl que contienen declaraciones del control independientemente de las definiciones reales de la clase.

Despues de probar varias opciones (5 min.) se me ocurrio que tal vez el migrador de proyectos a Asp.Net 2.0, me podria dar la respuesta, y asi fue. Una vez migrado el proyecto, en el log de migracion, me encontré con el siguiente mensaje:

=========================ERRORS===================

ERROR: The member declaration for ‘TextBox1’ was removed and its accessibility has been changed from ‘public’ to ‘protected’. To access this member from another page you should create a public accessor property for it.    WebUserControl1.ascx.vb

 

 

Asi que siguiendo las recomendaciones de Microsoft, la solución fue publicar este control en una nueva propiedad en el WebControl. Por ejemplo:

 

       Public Property myTextBox1() As System.Web.UI.WebControls.TextBox

             Get

                    Return Me.TextBox1

             End Get

             Set(ByVal value As System.Web.UI.WebControls.TextBox)

                    Me.TextBox1 = value

             End Set

       End Property

 

Todos los días aprendemos algomas de los interesanes cambios de Asp.Net 2.0.

Saludos

El Bruno

One response to “Visual Studio 2005 – Asp.Net 2.0, compiling with partial class”

  1. Bruno te contesto por aqui, el soft que uso para los videos es Camstasia Studio, me baje la version trial pero ya estan por vencer el plazo de puebao, pero buscando descubri que con el Windows Media Encoder de Microsoft, se puede hacer exactamente lo mismo, asi que para los proximos videos usare este. Nos vemos. Bye

    Like

Leave a comment

Discover more from El Bruno

Subscribe now to keep reading and get access to the full archive.

Continue reading