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.