2012-11-14 33 views
8

Tôi có một trang, nơi tôi muốn đăng nhập mọi thông báo xác thực mà người dùng không đáp ứng được các yêu cầu của trường được liên kết.Tìm trình xác thực không thành công asp.net

Vấn đề là postback/nút bấm của tôi không bao giờ xảy ra (có thể do xác nhận clientide), và do đó việc ghi nhật ký không bao giờ diễn ra trước khi người dùng thực sự có mọi trường đúng (không có lỗi xác thực).

Nút Phương thức sự kiện nhấp chuột:

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

Bất kỳ ý tưởng, làm thế nào tôi có thể đăng nhập theese tin nhắn?

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

Ồ, tôi thấy, bạn đang yêu cầu làm thế nào để móc vào các khách hàng javascript bên mà trình xác nhận asp.net phát ra. – MatthewMartin

+0

cảm ơn cho mẫu vòng lặp validator, tôi đã chuẩn bị viết nó một mình :) – rdmptn

Trả lời

3

Dưới đây là một phần của giải pháp, bạn có thể nhận được xác nhận/sai sự thật bằng cách gọi nó phía khách hàng:

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

function performCheck() 
{ 

if(Page_ClientValidate()) 
{ 

//Do something to log true/ false 
} 

} 
+0

Điều này có thể là lừa, bạn có biết làm thế nào tôi nhận được các trình xác nhận "không thành công" hay tôi có thể gọi phương thức C# bằng cách nào đó? – KLIM8D

+0

Đây là liên kết đến tài liệu MSDN cho thư viện JS mà trình xác nhận hợp lệ làm việc, từ đọc ngắn gọn của tôi, bạn không có nhiều việc để làm việc với: http://msdn.microsoft.com/en-us/library/ aa338815 (v = vs.71) .aspx – MatthewMartin

+0

Cảm ơn, bây giờ tôi có thể lặp qua các trình duyệt tính hợp lệ và cảnh báo nếu nó không hợp lệ. Chỉ cần trích xuất thông báo lỗi ngay bây giờ, vì một lý do nào đó nó không có giá trị cho mỗi trình duyệt tính hợp lệ. Tôi đã thêm javascript vào chủ đề. – KLIM8D

2

Cố gắng thay đổi thuộc tính EnableClientScript trên tất cả các trình xác nhận thành false. Tất cả các xác nhận hợp lệ của bạn sẽ chỉ xuất hiện ở phía máy chủ.

+0

Vâng, điều này làm cho công việc postback, bao giờ tính năng xác nhận trên các trường khi bạn gõ hoặc bấm vào trường tiếp theo đã biến mất. Tôi muốn giữ điều này nếu có thể. – KLIM8D

+0

Tôi nghĩ rằng đây có thể là đặt cược tốt nhất. Loại bỏ các trình duyệt tính hợp lệ của trang và thực hiện tất cả phía máy chủ. Bằng cách đó, bạn có nhiều quyền kiểm soát hơn đối với những gì cần đăng nhập. – NotMe

Các vấn đề liên quan