Validar un elemento seleccionado de un Datalist

Siguiendo con la línea de los últimos post que he publicado, hoy voy a mostrar como poder validar un control datalist con un validador  estándar de ASP.NET. Normalmente este tipo de controles no se pueden validar de una manera sencilla con estos validadores.

Pero gracias al artículo de José Manuel Alarcón que nos introduce en la forma correcta para utilizar los validadores con este tipo de controles.

Permitir la validación de un control con los validadores estándar de ASP.NET

Siguiendo el consejo de José Manuel, para poder validar este control de una manera elegante generaré un control personalizado para este menester.

[ToolboxData("<{0}:CustomDatalist runat=server></{0}:CustomDatalist>")]
[ValidationProperty("NumItems"), SupportsEventValidation]
public class RequiredDatalist : System.Web.UI.WebControls.DataList
{
   public string NumItems
   {
      get
      {
         if (this.Items.Count > 0)
           return this.Items.Count.ToString();
         else
           return String.Empty;
      }
   }
}

Luego en el proyecto web añadiremos el Datalist preparado para la validación.

<cc1:RequiredDatalist ID="DataList1" CssClass="tableproductos" runat="server">
<itemtemplate>
  <asp:CheckBox ID="chkItem" runat="server" Text='<%# Eval("Value") %>' />
</itemtemplate>
</cc1:RequiredDatalist>

Y el validador que hace referencia a una función JavaScript que será el que validara si existe un elemento seleccionado.

<asp:CustomValidator ID="CustomValidator2" runat="server" ClientValidationFunction="ValidarListaChkSeleccionada"
ValidateEmptyText="True" ControlToValidate="DataList1"  Display="Dynamic" >
</asp:CustomValidator>

Finalmente para que el control pueda ser validado añadiremos la función JavaScript.

function ValidarListaChkSeleccionada(source, arguments) {
    var resultado = false;
    if ($("#" + source.controltovalidate).length > 0) {
        $("#" + source.controltovalidate + " tr td input").each(function() {
            if (this.checked)
                resultado = true;
        });

        if (resultado)
            arguments.IsValid = true;
        else
            arguments.IsValid = false;
    }
}

 

De esta manera tan sencilla y mucho más elegante que utilizar controles ocultos para saber si hay un elemento seleccionado, tenemos nuestra lista validada.

Espero que este ejemplo sea de utilidad.

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s