2012-11-14 9 views
8

Ich habe eine Seite, wo ich jede Validierung Nachricht protokollieren möchte, die der Benutzer die Anforderungen des zugehörigen Felds nicht erfüllen konnte.Finden Sie fehlgeschlagen Validatoren asp.net

Das Problem ist, dass mein postback/button click nie auftritt (vielleicht wegen der clientseitigen Validierung), und daher die Protokollierung nie stattfindet, bevor der Benutzer tatsächlich jedes Feld richtig gemacht hat (keine Validierungsfehler).

Die Methode Button Click Event:

protected void btnNext_Click(object sender, EventArgs e) 
{ 
    Page.Validate(); 
    if(Page.IsValid) 
    { 
     //code 
    } 
    else 
    { 
     foreach (IValidator validator in Validators) 
     { 
      if (!validator.IsValid) 
      { 
       PageValidatorErrors error = new PageValidatorErrors 
           { 
            WebsiteID = AppState.WebsiteID, 
            Page = Request.Url.AbsolutePath, 
            URL = Request.Url.ToString(), 
            UserIP = Tools.GetIP(), 
            ErrorMessage = validator.ErrorMessage, 
            CreatedDate = DateTime.Now 
           }; 
       pageValidatorErrorsRep.insert(error); 
      } 
     } 
    } 
} 

Irgendwelche Ideen, wie ich Logmeldungen theese könnte?

Edit:

<script type="text/javascript"> 
    function validatePage() 
    { 
     if (window.Page_IsValid != true) 
     { 
      //Page_Validators is an array of validation controls in the page. 
      if (window.Page_Validators != undefined && window.Page_Validators != null) 
      { 
       //Looping through the whole validation collection. 
       for (var i = 0; i < window.Page_Validators.length; i++) 
       { 
        window.ValidatorEnable(window.Page_Validators[i]); 

        //if condition to check whether the validation was successfull or not. 
        if (!window.Page_Validators[i].isvalid) 
        { 
         var errMsg = window.Page_Validators[i].getAttribute('ErrorMessage'); 
         alert(errMsg); 
        } 
       } 
      } 
     } 
    } 
</script> 
+0

Oh, ich sehe, Sie zu fragen, wie in den Client-hook Side JavaScript, das die asp.net Validatoren emittieren. – MatthewMartin

+0

danke für das validator loop Beispiel, ich war gerade dabei, es auf eigene Faust zu schreiben :) – rdmptn

Antwort

3

Hier ein Teil der Lösung ist, können Sie die validates/true false erhalten, indem sie Client-Seite aufrufen:

http://razeeb.wordpress.com/2009/01/11/calling-aspnet-validators-from-javascript/

function performCheck() 
{ 

if(Page_ClientValidate()) 
{ 

//Do something to log true/ false 
} 

} 
+0

Das könnte der Trick sein, weißt du, wie ich die "gescheiterten" Validierer bekomme oder könnte ich irgendwie die C# -Methode aufrufen? – KLIM8D

+0

Hier ist der Link zum MSDN-Dokument für die JS-Bibliothek, mit der die Validierer arbeiten. Aus meiner kurzen Lektüre geht nicht viel hervor: http://msdn.microsoft.com/en-us/library/ aa338815 (v = vs.71) .aspx – MatthewMartin

+0

Danke, ich bin jetzt in der Lage, die Validatoren zu durchlaufen und warnt, wenn es nicht gültig ist. Sie müssen jetzt nur die Fehlermeldung extrahieren, aus irgendeinem Grund ist sie für jeden Validator null. Ich habe das Javascript zum Thema hinzugefügt. – KLIM8D

2

Versuchen Sie, EnableClientScript Eigenschaft auf false auf allen Validatoren zu ändern. Alle Ihre Validierungen werden nur auf der Serverseite durchgeführt.

+0

Ja, dies machte das Postback funktionieren, wie auch immer die Funktion mit Validierung auf die Felder, wie Sie tippen oder klicken Sie auf das nächste Feld ist weg ofc. Ich würde das gern behalten, wenn möglich. – KLIM8D

+0

Ich denke, das ist vielleicht die beste Wette. Befreien Sie sich von den Seiten-Validatoren und machen Sie alles serverseitig. Auf diese Weise haben Sie viel mehr Kontrolle darüber, was zu protokollieren ist. – NotMe