BC30002: Type ‘System.Data.Linq.Mapping.DatabaseAttribute’ is not defined.
Por Pablo Viale - ASP.NET 2.0 / 3.5, IIS, SQL (mySQL) - 29 Junio 2011
Si estás utilizando LINQ en tu aplicación de asp.net y te sale este error:
BC30002: Type 'System.Data.Linq.Mapping.DatabaseAttribute' is not defined.
Es probable que no hayas hecho referencia del assembly en el archivo web.config.
Entre el tag assemblies y /assemblies de tu archivo web.config coloca lo siguiente:
-
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
¡Suerte!
Cómo encontrar las dimensiones de una imagen subida mediante FileUpload
Por Pablo Viale - General - 2 Febrero 2011
Si cuentas con un control como este:
-
<asp:FileUpload ID="Imagen" runat="server" />
Mediante el cual pretendes recibir una imagen, y quieres validar el ancho y alto de ésta, haz lo siguiente en tu código de servidor:
-
Dim LaImagen As New System.Drawing.Bitmap(Imagen.PostedFile.InputStream)
-
If LaImagen.Width <> 680 Or LaImagen.Height <> 300 Then
-
'Pon aquí tu código correspondiente
-
End If
En el ejemplo anterior estamos diciendo "Si la imagen no mide de ancho 680 pixeles o no mide de alto 300 pixeles, entonces...".
Esto es útil para combinarlo con un "CustomValidator" y validar el tamaño de la imagen que estás recibiendo.
Cómo encontrar la extensión de un archivo subido mediante FileUpload
Por Pablo Viale - General - 2 Febrero 2011
Si estás usando un control como este:
-
<asp:FileUpload ID="Imagen" runat="server" />
Y necesitas conocer su extensión para realizar alguna validación, haz lo siguiente en tu código de servidor:
-
If System.IO.Path.GetExtension(Imagen.FileName).ToLower <> ".jpg" then
-
'Pon aquí el código correspondiente
-
End If
En el ejemplo anterior estamos diciendo "Si la extensión del archivo NO es igual a ".jpg", entonces...".
Esto es útil combinándolo con un "CustomValidator" para revisar que solamente estén subiendo imágenes, por ejemplo.
Cómo obtener el UserId del usuario logueado
Por Pablo Viale - ASP.NET 2.0 / 3.5 - 26 Noviembre 2010
Para obtener el UserID del usuario actualmente logueado, utiliza el siguiente código:
-
Dim UsuarioLogueado As MembershipUser = Membership.GetUser()
-
Dim ElGUID As Guid = UsuarioLogueado.ProviderUserKey
-
'Si lo necesitas como string utiliza ElGUID.ToString
En el ejemplo el UserId queda almacenado en la variable ElGUID que es de tipo Guid (Globally unique identifier).
Crea botones para tus formularios con CSS
Por Pablo Viale - General - 20 Noviembre 2010
En esta página encuentras el CSS Button Designer, una buena herramienta para crear el código CSS de tus botones. La interface es gráfica y te permite modificar todo lo relacionado con el botón, como fondo, bordes, tipo de letra, ancho, alto, etc.
Al final te presenta el código que debes copiar y pegar en tu hoja de estilos.
Utilizando múltiples controles UpdateProgress en una sola página
Por Pablo Viale - ASP.NET 2.0 / 3.5, Ajax - 12 Noviembre 2010
Si tienes dos o más controles UpdatePanel que quieres que se actualicen por separado, quizás también quieras tener diferentes indicadores “un momento por favor…” para cada uno de ellos, con la finalidad de que se muestren en diferentes posiciones.
Antes de darte la solución considera este código:
-
<asp:ScriptManager ID="ScriptManager1" runat="server" />
-
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
-
<Triggers>
-
<asp:AsyncPostBackTrigger ControlID="Boton1" EventName="Click" />
-
</Triggers>
-
<ContentTemplate>
-
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="0">
-
<ProgressTemplate>
-
Un momento por favor...
-
</ProgressTemplate>
-
</asp:UpdateProgress>
-
<asp:Button ID="Boton1" runat="server" Text="Botón 1" />
-
<asp:Label ID="Hora1" runat="server" Text="<br />"></asp:Label>
-
</ContentTemplate>
-
</asp:UpdatePanel>
-
<br />
-
<br />
-
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
-
<Triggers>
-
<asp:AsyncPostBackTrigger ControlID="Boton2" EventName="Click" />
-
</Triggers>
-
<ContentTemplate>
-
<asp:UpdateProgress ID="UpdateProgress2" runat="server" DisplayAfter="0">
-
<ProgressTemplate>
-
Un momento por favor...
-
</ProgressTemplate>
-
</asp:UpdateProgress>
-
<asp:Button ID="Boton2" runat="server" Text="Botón 2" />
-
<asp:Label ID="Hora2" runat="server" Text=""></asp:Label>
-
</ContentTemplate>
-
</asp:UpdatePanel>
-
Protected Sub Boton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Boton1.Click
-
Threading.Thread.Sleep(1000)
-
Hora1.Text = "La hora es " & Now.ToString
-
End Sub
-
-
Protected Sub Boton2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Boton2.Click
-
Threading.Thread.Sleep(1000)
-
Hora2.Text = "La hora es " & Now.ToString
-
End Sub
El cual genera lo siguiente:
Y al hacer clic en el botón 1 (o en el 2) ocurre lo siguiente:
Los dos controles UpdateProgress aparecieron porque es su comportamiento natural cuando se hace un postBack. Obviamente queremos que cada uno aparezca únicamente cuando se haga clic en su botón correspondiente.
Para hacerlo, utiliza la propiedad AssociatedUpdatePanelID del control UpdateProgress, de tal forma que tu código quede así:
-
<asp:ScriptManager ID="ScriptManager1" runat="server" />
-
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
-
<Triggers>
-
<asp:AsyncPostBackTrigger ControlID="Boton1" EventName="Click" />
-
</Triggers>
-
<ContentTemplate>
-
<asp:UpdateProgress ID="UpdateProgress1" runat="server" DisplayAfter="0" AssociatedUpdatePanelID="UpdatePanel1">
-
<ProgressTemplate>
-
Un momento por favor...
-
</ProgressTemplate>
-
</asp:UpdateProgress>
-
<asp:Button ID="Boton1" runat="server" Text="Botón 1" />
-
<asp:Label ID="Hora1" runat="server" Text="<br />"></asp:Label>
-
</ContentTemplate>
-
</asp:UpdatePanel>
-
<br />
-
<br />
-
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
-
<Triggers>
-
<asp:AsyncPostBackTrigger ControlID="Boton2" EventName="Click" />
-
</Triggers>
-
<ContentTemplate>
-
<asp:UpdateProgress ID="UpdateProgress2" runat="server" DisplayAfter="0" AssociatedUpdatePanelID="UpdatePanel2">
-
<ProgressTemplate>
-
Un momento por favor...
-
</ProgressTemplate>
-
</asp:UpdateProgress>
-
<asp:Button ID="Boton2" runat="server" Text="Botón 2" />
-
<asp:Label ID="Hora2" runat="server" Text=""></asp:Label>
-
</ContentTemplate>
-
</asp:UpdatePanel>
El código VB quedaría igual
De esta forma al oprimir el primer botón ocurrirá esto:
Y al oprimir el segundo botón verás esto:
De esta forma puedes colocar varios indicadores para cada una de las partes en las que dividas visualmente tu página.
Windows Live Messenger no funciona en Vista o Windows 7
Por Pablo Viale - Windows - 14 Agosto 2010
Si te encuentras con el problema de que tienes Windows Vista o Windows 7 e instalas Windows Live Messenger, y al intentar conectarte los monitos se quedan dando vueltas eternamente y nunca logras establecer conexión, intenta este truco.
Haz clic en el botón de inicio y teclea “cmd”, y cuando salga el icono, dale clic con el botón derecho y selecciona “Ejecutar como administrador”:
Cuando aparezca la ventana negra, teclea lo siguiente:
netsh int tcp set global autotuninglevel=disabled
Y listo, ya con eso queda arreglado tu Windows Live Messenger.
El botón LIKE de Facebook no se ve en Internet Explorer
Por Pablo Viale - Varios - 20 Julio 2010
Si estás tratando de integrar el botón LIKE de Facebook en tu sitio web y lo ves en todos los navegadores excepto en Internet Explorer, añade este atributo al tag HTML:
-
xmlns:fb="http://www.facebook.com/2008/fbml"
De tal forma que tu tag HTML al final deberá verse así:
-
<html xmlns:fb="http://www.facebook.com/2008/fbml">
Listo, con eso arreglas el problema.
Cómo instalar PHP en Windows 2003 con IIS 6
Por Pablo Viale - IIS, Windows - 16 Julio 2010
Generalmente es un dolor de cabeza instalar PHP en Windows, es por eso que hice esta guía que explica como hacer una instalación básica de PHP. Si necesitas algo más especializado como instalar extensiones utiliza Google para encontrar otros tutoriales.
1. Descarga los archivos correctos
Ingresa a http://php.net/downloads.php y descarga el “zip package”. No sigas la liga que dice windows.php.net:
Cópialos en tu servidor en “C:\PHP”. Apégate a esta ruta, no intentes rutas extrañas que tengan espacios o que sean muy largas.
2. Configura PHP.INI
En los archivos que acabas de descomprimir encontrarás un archivo llamado “php.ini-recommended” o algo similar, renómbralo a “php.ini”, y con un editor de texto plano encuentra la línea:
; cgi.force_redirect = 1
Y cámbiala por:
cgi.force_redirect = 0
3. Copia los archivos necesarios al directorio de Windows
Copia los siguientes archivos:
- php5isapi.dll
- php.ini
a la carpeta “C:\WINDOWS\system32”
O bien, agrega la ruta “c:\php” a la variable de entorno PATH del servidor.
4. Configura IIS
En la consola de IIS abre “Web service extensions” y agrega una nueva:
Pon “PHP” en “Extension name” y selecciona el archivo “c:\php\php5isapi.dll”. Marca la casilla que dice “Set extension status to Allowed”.
Al final debe verse así en la lista de extensiones:
Todavía en la consola de IIS, selecciona el sitio web o el directorio virtual al que quieras dar permisos de ejecutar PHP y abre sus propiedades. Ve a la pestaña “Home Directory” y haz clic en el botón “Configuration”:
En la nueva ventana, abre la pestaña “Mappings” y agrega una extensión ISAPI con el archivo “C:\php\php5isapi.dll” y los verbos “GET,POST,HEAD”:
Haz clic en todos los botones “OK” hasta salir.
5. Configura los permisos
Ahora fíjate en qué “Application pool” está corriendo tu sitio web o directorio virtual.
Y en la consola de IIS, arriba de “Web Sites” encontrarás los “Application pools”, abre las propiedades de la “pool” en la que corre tu sitio web y en su pestaña “Identity” fíjate qué usuario se utiliza:
Ahora tienes que darle permisos a este usuario sobre el directorio “c:\php”.
Abre el explorador de Windows y señala el directorio “php” dentro de “c:\”, y ve a sus propiedades, luego a la pestaña “Security”, haz clic en “Add” y agrega al usuario que encontraste arriba. Luego oprime el botón “Advanced” y asegúrate de que esté marcada la casilla que dice “Replace permission entries on all child objects with entries shown here that apply to child objects”:
Oprime “OK” hasta cerrar todo.
6. Haz pruebas
Crea un archivo llamado, por ejemplo, “phpinfo.php” y agrega esta línea de código:
Ahora abre esa página en un navegador, si ves esto:
es que lo lograste.
Si no,
, intenta buscar los errores que te aparezcan en Google.
Cómo asignar un mismo procedimiento a múltiples botones
Por Pablo Viale - ASP.NET 2.0 / 3.5 - 5 Julio 2010
Supongamos que por alguna razón quieres colocar dos botones en una página ASP.NET que ejecuten el mismo procedimiento. Por ejemplo, un largo formulario con dos botones para guardar los cambios.
Solamente tienes que escribir el código para uno de los botones, como normalmente lo harías.
Y para el segundo, establece el evento "OnClick" al procedimiento del primer botón.
Aquí está un ejemplo con los dos botones:
-
<asp:Button ID="Guardar" runat="server" Text="Guardar cambios" />
-
<asp:Button ID="Guardar2" runat="server" Text="Guardar cambios" OnClick="Guardar_Click" />
¡Suerte!