The MaximumValue cannot be less than the MinimumValue

Cuando creas un RangeValidator en una aplicación ASP.NET debes recordar establecer el tipo de dato que estás comparando.

Este es un ejemplo de un error común. Tenemos el siguiente validador:

  1. <asp:RangeValidator
  2.   ID="ValidadorMinimo"
  3.   runat="server"
  4.   ControlToValidate="NumberOfPersons"
  5.   CssClass="validador"
  6.   ErrorMessage="Minimum"
  7.   ForeColor=""
  8.   MinimumValue="2"
  9.   MaximumValue="10" >*</asp:RangeValidator>

Al abrir la página aspx que lo contiene, obtenemos el siguiente error:

The MaximumValue 10 cannot be less than the MinimumValue 2 of ValidadorMinimo.

Lo que está ocurriendo es que por default el tipo de datos es String, y hablando de cadenas de texto, el 10 es menor que el 2.

Como queremos comparar números enteros, debemos establecer la propiedad Type del validador a Integer, de esta manera:

  1. <asp:RangeValidator
  2.   ID="ValidadorMinimo"
  3.   runat="server"
  4.   ControlToValidate="NumberOfPersons"
  5.   CssClass="validador"
  6.   ErrorMessage="Minimum"
  7.   ForeColor=""
  8.   MinimumValue="2"
  9.   MaximumValue="10"
  10.   Type="Integer"
  11.   >*</asp:RangeValidator>

Templates de Dreamweaver y páginas ASP.NET con código code-behind

Existe una situación extraña cuando trabajas en un sitio web con plantillas de Dreamweaver y con ASP.NET 2.

Cuando añades una nueva página aspx, la primera línea del código es algo similar a esto:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Contacto.aspx.vb" Inherits="Contacto" %>

Si esta página está controlada por un template de Dreamweaver, y tú modificas ese template, y luego aplicas los cambios, notarás que Dreamweaver elimina la citada línea del archivo. Lo cual simplemente hace que tu página ASP.NET no funcione más.

Puedes regresar a Visual Web Developer (o la herramienta de ASP.NET que utilices) y volver a ponerle la línea eliminada, pero si tienes muchas páginas esto puede ser una pesadilla.

Encontré un post en un foro con una solución que supuse no iba a funcionar, pero la probé y de hecho sirve!

A tus páginas aspx añádeles esta línea después de la línea de declaración:

<%--'comment--%>

De tal forma que te quede algo como esto:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Contacto.aspx.vb" Inherits="Contacto" %>
<%--'comment--%>

Ahora pruébalo para que veas como funciona. Haz cualquier cambio a tu template de Dreamweaver, aplica el template a las páginas basadas en él, y verás que la línea permanece intacta, haciendo que la aplicación siga funcionando sin problemas.

Trabajar con un ArrayList

El ArrayList me resulta ser más útil que el Array regular.

Aquí hay algunos ejemplos:

Declaración de un ArrayList

  1. Dim AL As ArrayList = New ArrayList

Añadir un elemento

  1. AL.Add("hola")

Ordenarlo

  1. AL.Sort()

Ordenarlo al revés

  1. AL.Reverse()

Remover duplicados

  1. Shared Function RemoverDuplicados(ByVal ElArreglo As ArrayList) As ArrayList
  2.     Dim ret As ArrayList = New ArrayList()
  3.     Dim elemento As Object
  4.     For Each elemento In ElArreglo
  5.         If Not ret.Contains(elemento) Then
  6.             ret.Add(elemento)
  7.         End If
  8.     Next
  9.     RemoverDuplicados = ret
  10. End Function

Cómo utilizar Cookies en ASP.NET

Para manipular las cookies del cliente mediante ASP.NET 2, utiliza los siguientes ejemplos.

Recuerda que una sola Cookie puede guardar varios valores. Esto se logra mediante la colección Values.

Para crear una Cookie

  1. Dim Galleta As HttpCookie
  2. Galleta = New HttpCookie("datos")
  3. Galleta.Values.Add("nombre", Nombre.Text)
  4. Galleta.Expires = DateTime.MaxValue 'Nunca caduca
  5. Response.AppendCookie(Galleta)

Para obtener el valor de una Cookie

  1. Dim Galleta As HttpCookie
  2. Galleta = Request.Cookies("datos")
  3. Nombre.Text = Galleta.Values("nombre")

Para probar si una determinada Cookie existe

  1. Dim PruebaGalleta As HttpCookie
  2. PruebaGalleta = Request.Cookies("datos")
  3.  
  4. If PruebaGalleta Is Nothing Then
  5.     'No existe
  6. Else
  7.     'Existe
  8. End If

Para modificar una Cookie

  1. Dim Galleta As HttpCookie
  2. Galleta = Request.Cookies("datos")
  3. Galleta.Values.Set("nombre", Nombre.Text)
  4. Galleta.Expires = DateTime.MaxValue 'Nunca caduca
  5. Response.Cookies.Set(Galleta)

Para eliminar una Cookie

  1. Response.Cookies.Remove("datos")

Cómo crear un mensaje de confirmación para eliminar un registro en un GridView

En este post veremos cómo implementar un mensaje de confirmación con javascript para borrar un registro en un GridView.

Debes tener un GridView y un ObjectDataSource similares a estos:

  1. <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="ObjectDataSource1" AllowPaging="True" AllowSorting="True" CellPadding="0" PageSize="30" GridLines="None" Width="100%" DataKeyNames="id">
  2.     <Columns>
  3.         <asp:BoundField DataField="id" HeaderText="ID" InsertVisible="False" SortExpression="id" />
  4.         <asp:BoundField DataField="usuario" HeaderText="Usuario" SortExpression="usuario" />
  5.  
  6.         <asp:TemplateField HeaderText="Eliminar">
  7.           <ItemTemplate>
  8.             <asp:LinkButton ID="LinkButton1"
  9.              CommandArgument='<%# Eval("id") %>'
  10.               CommandName="Delete" runat="server">
  11.               Eliminar</asp:LinkButton>
  12.           </ItemTemplate>
  13.         </asp:TemplateField>            
  14.        
  15.     </Columns>
  16.  
  17.     <EmptyDataTemplate>
  18.         No existen registros.
  19.     </EmptyDataTemplate>
  20. </asp:GridView>
  21. <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="{0}"
  22.    SelectMethod="ObtenParaGridView" TypeName="BLLComentario" DeleteMethod="BorraComentario">
  23.     <DeleteParameters>
  24.         <asp:Parameter Name="id" Type="Int32" />
  25.     </DeleteParameters>
  26. </asp:ObjectDataSource>

Ahora bien, para agregar el javascript necesario para realizar la confirmación, debemos valernos del evento GridView1_RowDataBound, así:

  1. Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
  2.         'Anadir javascript de confirmacion para cada linkbutton
  3.         If e.Row.RowType = DataControlRowType.DataRow Then
  4.             Dim Lb As LinkButton = e.Row.FindControl("LinkButton1")
  5.             Lb.Attributes.Add("onclick", "javascript:return confirm('¿Está seguro de que desea eliminar el registro con ID=" & DataBinder.Eval(e.Row.DataItem, "id") & "?')")
  6.         End If
  7.     End Sub

Y listo, obtendremos una confirmación como esta:

Confirmar con javascript eliminación de registro en GridView