Archivo de Junio 2008

h1

The Controls collection cannot be modified because the control contains code blocks (i.e. ).

Junio 17, 2008

Recientemente me he encontrado con un problemilla trabajando con controles web de Telerik al intentar acceder a ellos desde funciones javascript.

Al intentar a acceder a un control con el siguiente codigo dentro del head:

var label = document.getElementById(“<%= Label1.ClientID%>”);

al cargar la pagina me devolvia el siguiente error:

The Controls collection cannot be modified because the control contains code blocks (i.e. <% … %>).

Una solucion la encontre aqui La solucion consiste basicamente en sustituir <%=…%> por <#…%>. Una cuestion es que con este metodo si en el head tienes puesto runat=”server” no funciona. En un principio lo quite por que no me era necesario, ya que era un problema que tenia que solucionar rapidamente y no tenia mucho tiempo para investigar mas.

Pero claro, cuando en vez de arreglar un error lo ocultas pues suele pasar que este acaba apareciendo tiempo despues. La semana pasada utilizando un componente .net que encampsula unas librerias javascript ocurrio la desgracia. O ponia runat=”server” o el componente no funcionaba. Y si lo ponia no funcionaba mi codigo. Asi que investigando un poco mas (leyendome todos los comentarios del link que he puesto antes) encontre otra solucion: mover mi codigo de script de la parte Head a la parte Form. Por lo que he leido esto funciona casi siempre (alguien comenta que en los controles de usuario no le funciona). Espero tener algun rato para echarle un vistazo dentro de poco.

h1

Configuración Log4Net (I)

Junio 10, 2008

Log4Net es una libreria de logeo que nos permite logear facilmente mensajes de nuestras aplicaciones a diferentes tipos de almacenamiento. Por ejemplo: ficheros de texto, MS SQL, Oracle, SQL Lite, SMTP, etc. Puedes echar un vistazo a la lista completa en el sitio de Log4Net

Si logear los errores es facil, quizas configurar el funcionamiento no lo es tanto. Hay muchas opciones a tener en cuenta y puede llevarnos un rato el configurarlo correctamente. En este primer articulo intentare comentar una forma sencilla de ponerlo a funcionar.

Que nos hace falta?

Simplemente descargar la libreria del sitio web: Log4Net. Despues simplemente se descomprime a una carpeta de nuestro gusto. Lo mas recomendable es crear una carpeta llamada “Lib” dentro del proyecto en la que tener todas las librerias de terceros que usemos en nuestros proyectos.

Creacion del proyecto

Vamos a crear un proyecto web para este ejemplo.

  • Una vez creado añadimos la referencia a log4net.
  • Comprobamos que la opcion “Copy Local” tiene valor true.
  • Creamos un archivo de configuracion y añadimos la siguiente linea:
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>
  • A continuacion de la seccion configsection se añadira el siguiente codigo:
    <log4net>
      <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
        <file value="aplicacion.log" />
        <appendToFile value="true" />
        <maximumFileSize value="1024KB" />
        <maxSizeRollBackups value="10" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date %level %logger - %message%newline" />
        </layout>
      </appender>
      <root>
        <level value="ALL" />
        <appender-ref ref="RollingFile" />
      </root>
    </log4net>
  • En este codigo indicamos diversas cosas como que el tipo de log a escribir, que sera un fichero, el nombre del fichero, su tamaño maximo, si se concatenan los mensajes en el fichero o se crea uno nuevo, el numero maximo de ficheros a crear y la estructura que tendran los mensajes.

  • Ya tendriamos configurado todo y solo quedaria usarlo en el codigo. Bastaria con usar unas lineas de codigo:
using log4net;
namespace Log4NetTest
{
    public partial class Prueba : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                log4net.Config.XmlConfigurator.Configure();
                ILog log = LogManager.GetLogger(typeof(Prueba));
               log.Debug("Probando Log4Net");
            }
            catch (Exception ex)
            {
                throw;
            }
        }
    }
}

Con la primera linea cargamos la configuracion de Log4Net, la segunda crea el objeto para registrar los mensajes y la tercera es la encargada de registrar el mensaje deseado. La primera linea es mejor que se ponga en el global.asax en el evento aplication_load para que se cargue la configuracion cada vez que se arranque la aplicacion. Asi mismo la segunda es recomendable crear como variable global a la aplicacion. Por esta vez es suficiente, mas adelante comentare mas cosas sobra las diferentes opciones de configuracion de Log4Net. Por esta vez ya es suficiente