2011-01-16 3 views
1

Ich habe in vielerlei Hinsicht versucht, aber die Fehlermeldung für benutzerdefinierte Validierer wird nicht in der Validierungszusammenfassung angezeigt, aber es (ValidationSummary) zeigt Fehlermeldung für jeden anderen Typ von Validierer.Warum wird die Fehlermeldung für benutzerdefinierten Validator nicht im Meldungsfeld angezeigt?

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Expt_Custom Validator.aspx.cs" Inherits="Expt_Custom_Validator" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
    <script runat="server"> 
     protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args) 
     { 
      if (args.Value.Equals("Jagdeep")) 
       args.IsValid = false; 
      else 
       args.IsValid = true; 

     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Label ID="lblName" runat="server" Text="Enter Your Name"></asp:Label> 
     <asp:TextBox ID="txtbxName" runat="server"></asp:TextBox> 

     <asp:CustomValidator ID="CustomValidator1" runat="server" 
      ErrorMessage="You are Not allowed" Display="None" 
      onservervalidate="CustomValidator1_ServerValidate"></asp:CustomValidator> 
     <br /> 
     <asp:Label ID="lblClass" runat="server" Text="Class"></asp:Label> 
     <asp:TextBox ID="txtClass" runat="server"></asp:TextBox> 
     <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
      ErrorMessage="Please enter Clas" ControlToValidate="txtClass" Display="None"></asp:RequiredFieldValidator> 
     <br /> 

     <asp:ValidationSummary ID="ValidationSummary1" runat="server" /> 
     <br /> 
     <asp:Button ID="Button1" runat="server" Text="Validate" /> 

    </div> 
    </form> 
</body> 
</html> 
+0

Mögliche Duplikat http://stackoverflow.com/questions/811734/elegant-way-to -make-customvalidator-work-with-validationsummary-messagebox – djeeg

+0

Warum CustomValidator die Funktion auf Serverseite validiert, aber Vaidatoren zur Validierung auf Client-Seite verwendet? – Learner

Antwort

4

Individueller Validator, wenn in Formview Platzierung nicht seine Fehlermeldung nach dem serverseitige Validierung zeigen (obwohl es validiert wurde und das Ergebnis ist ungültig) den Mittelwert diesen in beheben es von einem Update-Panel zu wickeln.

0

Ich habe dieses Problem gelöst, indem ich einen Clientskriptblock registriert habe, der den Inhalt der Validierungszusammenfassung aktualisiert. Ich habe jQuery für benutzten:

private void DisplayCustomValidationMessage(CustomValidator cv, ValidationSummary vs) 
{ 
     if ((cv == null) || (vs == null)) return; 

     Type csType = this.GetType(); 

     if (ClientScript.IsClientScriptBlockRegistered(csType, cv.ID)) return; 

     StringBuilder sb = new StringBuilder(@"<script type='text/javascript'>"); 
     sb.Append(@"$(function() {"); 
     sb.Append(@"var $vs = $('#" + vs.ClientID + "');"); 
     sb.Append(@"if($vs.find('ul').length){"); 
     sb.Append(@"$vs.find('ul').append('<li>" + cv.ErrorMessage + "</li>');"); 
     sb.Append(@"}else{"); 
     sb.Append(@"$vs.html('Fehlerhafte Eingabe(n):<ul><li>" + cv.ErrorMessage + "</li></ul>'); }"); 
     sb.Append(@"$vs.css('display', 'block');"); 
     sb.Append(@"});"); 
     sb.Append(@"</script>"); 

     ClientScript.RegisterClientScriptBlock(csType, cv.ID, sb.ToString()); 
} 

Das Verfahren hat aufgerufen werden, wenn die Validierung fehlschlägt:

protected void cvYourCustomValidator_ServerValidate(object source, ServerValidateEventArgs args) 
    { 
     args.IsValid = YourCustomValidationMethod(); 

     if (!args.IsValid) 
     { 
      DisplayCustomValidationMessage((CustomValidator) source, vsYourValidationSummaryControl); 
     } 
    } 
Verwandte Themen