asp.net - Cómo validar que un cuadro de lista no está vacío(lado del cliente)
validation listbox (7)
Estoy trabajando con ASP.NET 3.5. Tengo un cuadro de lista al que los usuarios deben agregar elementos (escribí el código para esto). Mi requisito es que se agregue al menos un elemento al cuadro de lista o no pueden enviar el formulario. Tengo varios otros validadores en la página y todos escriben en un control ValidationSummary. Me gustaría que esta validación de cuadro de lista también escriba en el control Resumen de validación. Cualquier ayuda es muy apreciada. Gracias.
Coloque un validador personalizado, agregue el mensaje de error que desee, haga doble clic en el validador personalizado para acceder al código que se encuentra detrás para el controlador de eventos, y luego implementaría el lado del servidor de esta manera:
protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = ListBox1.Items.Count > 0;
}
También puede implementar javascript en el lado del cliente también.
Acabo de vomitar esto en una página y lo probé rápidamente, por lo que podría necesitar modificarlo un poco: (El botón1 solo agrega un elemento al Cuadro de lista)
<script language="JavaScript">
<!--
function ListBoxValid(sender, args)
{
args.IsValid = sender.options.length > 0;
}
// -->
</script>
<asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="NOVALID" />
<asp:Button ID="Button2" runat="server" Text="ButtonsUBMIT" />
<asp:CustomValidator ID="CustomValidator1" runat="server"
ErrorMessage="CustomValidator"
onservervalidate="CustomValidator1_ServerValidate" ClientValidationFunction="ListBoxValid"></asp:CustomValidator>
Si agrega un resumen de validación a la página, su texto de error debería aparecer en ese resumen si no hay elementos en el ListBox u otro control de colección, lo que sea que quiera usar, siempre que el ValidationGroup sea el mismo .
Deberá registrar su control con la página enviando el ClientID. Luego, puede usar Microsoft AJAX para tomar su control y verificar los valores.
<asp:CustomValidator
runat="server"
ControlToValidate="listbox1"
ErrorMessage="Add some items yo!"
ClientValidationFunction="checkListBox"
/>
<script type="Text/JavaScript">
function checkListBox(sender, args)
{
args.IsValid = sender.options.length > 0;
}
</script>
Esto no funcionó para mí:
function ListBoxValid(sender, args)
{
args.IsValid = sender.options.length > 0;
}
Pero esto hizo:
function ListBoxValid(sender, args)
{
var ctlDropDown = document.getElementById(sender.controltovalidate);
args.IsValid = ctlDropDown.options.length > 0;
}
En realidad, esta es la forma correcta de hacer que esto funcione (en lo que respecta al JavaScript).
ListBox.options.length siempre será su número total de opciones, no el número que ha seleccionado. La única forma en que he encontrado que funciona es usar un ciclo for para recorrer la lista.
function ListBoxValid (remitente, args) {
var listBox = document.getElementById(sender.controltovalidate);
var listBoxCnt = 0;
for (var x =0; x<listBox.options.length; x++)
{
if (listBox.options[x].selected) listBoxCnt++;
}
args.IsValid = (listBoxCnt>0)
}
tengo que asegurarme de agregar estas propiedades al CustomValidator:
Display="Dynamic" ValidateEmptyText="True"
este trabajo para mi
<script language="JavaScript">
function CheckListBox(sender, args)
{
args.IsValid = document.getElementById("<%=ListBox1.ClientID%>").options.length > 0;
}
</script>
<asp:ListBox ID="ListBox1" runat="server"></asp:ListBox>
<asp:CustomValidator ID="CustomValidator1" runat="server"
ErrorMessage="*Required" ClientValidationFunction="CheckListBox"></asp:CustomValidator>