2008-09-24 4 views
3

Je travaille avec ASP.NET 3.5. J'ai une zone de liste dans laquelle les utilisateurs doivent ajouter des éléments (j'ai écrit le code pour cela). Mon exigence est qu'au moins un élément doit être ajouté à la liste ou qu'ils ne peuvent pas soumettre le formulaire. J'ai plusieurs autres validateurs sur la page et ils écrivent tous dans un contrôle ValidationSummary. Je voudrais également que cette validation de listbox soit écrite dans le contrôle Résumé de la validation. Toute aide est grandement appréciée. Je vous remercie.Comment puis-je valider qu'une zone de liste n'est pas vide (côté client)

Répondre

-1

Vous voulez enregistrer votre contrôle avec la page en envoyant le ClientID. Ensuite, vous pouvez utiliser Microsoft AJAX pour saisir votre contrôle et vérifier les valeurs.

5

Baisse dans un validateur personnalisé, Ajoutez votre souhaitée message d'erreur, double-cliquez sur le validateur personnalisé pour obtenir le code sous-jacent pour le gestionnaire d'événements, et vous alors mettre en œuvre côté serveur comme ceci:

protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) 
{ 
     args.IsValid = ListBox1.Items.Count > 0; 
} 

Vous pouvez également implémenter javascript côté client.

Je viens de jeter ce sur une page et tester rapidement, de sorte que vous pourriez avoir besoin de ruser un peu: (Le button1 ne fait qu'ajouter un élément à la zone de liste)

<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 vous ajoutez un résumé de validation à la page, votre texte d'erreur devrait apparaître dans ce résumé s'il n'y a aucun élément dans le contrôle ListBox, ou tout autre contrôle de collection, ce que vous voulez utiliser, tant que le ValidationGroup est le même.

1
<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>  
5

Cela n'a pas fonctionné pour moi:

function ListBoxValid(sender, args) 
{ 
     args.IsValid = sender.options.length > 0; 
} 

Mais cela:

function ListBoxValid(sender, args) 
{ 
     var ctlDropDown = document.getElementById(sender.controltovalidate); 
     args.IsValid = ctlDropDown.options.length > 0; 
} 
1

En fait, c'est la bonne façon de faire ce travail (pour autant que le JavaScript est concerné). ListBox.options.length sera toujours le nombre total d'options, pas le nombre que vous avez sélectionné.

La seule façon que j'ai trouvé qui fonctionne est d'utiliser une boucle for pour parcourir la liste.

function ListBoxValid(sender, 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) 

}

3

dois assurez-vous d'ajouter ces propriétés à la CustomValidator:

Display="Dynamic" ValidateEmptyText="True" 
0

ce travail pour moi

<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> 
Questions connexes