2012-11-14 13 views
8

Mam stronę, na której chcę rejestrować każdą wiadomość potwierdzającą, której użytkownik nie spełniał wymagań związanych z polem.Znajdź nieudane walidatory asp.net

Problem polega na tym, że moje odświeżenie strony/kliknięcie przycisku nigdy nie występuje (być może z powodu sprawdzania poprawności klienta), a zatem rejestrowanie nigdy nie ma miejsca, zanim użytkownik rzeczywiście uzyska prawo do każdego pola (brak błędów sprawdzania poprawności).

Sposób zdarzenia kliknięcia przycisku:

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); 
      } 
     } 
    } 
} 

Wszelkie pomysły, w jaki sposób mogę się zalogować theese wiadomości?

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

Och, widzę, prosicie jak podłączyć do klienta po stronie javascript, że walidatory asp.net emitują. – MatthewMartin

+0

dziękuję za próbkę pętli walidatora, właśnie chciałem napisać to na własną rękę :) – rdmptn

Odpowiedz

3

Oto część rozwiązania, można uzyskać sprawdza/true fałszywych powołując go po stronie klienta:

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

function performCheck() 
{ 

if(Page_ClientValidate()) 
{ 

//Do something to log true/ false 
} 

} 
+0

Może to być sztuczka, czy wiesz, jak uzyskać "nieudane" weryfikatory lub czy mogę jakoś zadzwonić do metody C#? – KLIM8D

+0

Oto link do dokumentu MSDN dla biblioteki JS, z którą działają walidatory, z mojego krótkiego czytania wynika, że ​​nie masz wiele do roboty z: http://msdn.microsoft.com/en-us/library/ aa338815 (v = vs.71) .aspx – MatthewMartin

+0

Dzięki, jestem teraz w stanie przechodzić przez walidatory i powiadamiać, jeśli jest niepoprawny. Wystarczy wyodrębnić komunikat o błędzie, z jakiegoś powodu jest on zerowy dla każdego walidatora. Dodałem javascript do tematu. – KLIM8D

2

Spróbuj zmienić właściwość EnableClientScript wszystkich walidatorami false. Wszystkie twoje sprawdzenia będą wykonywane tylko po stronie serwera.

+0

Tak, to sprawiło, że praca w poczcie zwrotnej, jakkolwiek funkcja z walidacją na polach podczas pisania lub kliknięcia następnego pola minęła ofc. Chciałbym zachować to, jeśli to możliwe. – KLIM8D

+0

Myślę, że to może być najlepszy zakład. Pozbądź się walidatorów stron i zrób to po stronie serwera. W ten sposób masz większą kontrolę nad tym, co należy rejestrować. – NotMe

Powiązane problemy