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.

 

Vdatalist

Espero que este ejemplo sea de utilidad.

Un comentario en “Validar un elemento seleccionado de un Datalist”

  1. Hola Marc, muchas gracias por tus aportes.
    Tengo una consulta con un control parecido pero que lo hice de otra manera. De igual manera yo deseo validar que el usuario seleccione al menos una opcion en el ListBox y tengo este codigo:


    --------------------------------------------------

    Pero este no me funciona si no tengo seleccionado una fila del listbox, no se que estara impidiendo que se realice la validacion de una vez.

    Gracias de antemano

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *