2008-08-04 40 views
24

Tôi có chức năng xác thực tùy chỉnh trong JavaScript trong điều khiển người dùng trên trang web .Net 2.0 kiểm tra xem khoản phí đã thanh toán không vượt quá số tiền đến hạn.Xác thực phía máy khách tùy chỉnh ASP.Net

Tôi đã đặt mã xác thực trong tệp ascx và tôi cũng đã thử sử dụng Page.ClientScript.RegisterClientScriptBlock() và trong cả hai trường hợp xác thực sẽ kích hoạt nhưng không thể tìm thấy hàm JavaScript.

Kết quả trong bảng điều khiển lỗi của Firefox là "feeAmountCheck không được xác định". Đây là hàm (được lấy trực tiếp từ firefox-> view source)

<script type="text/javascript"> 
    function feeAmountCheck(source, arguments) 
    { 
     var amountDue = document.getElementById('ctl00_footerContentHolder_Fees1_FeeDue'); 
     var amountPaid = document.getElementById('ctl00_footerContentHolder_Fees1_FeePaid'); 

     if (amountDue.value > 0 && amountDue >= amountPaid) 
     { 
      arguments.IsValid = true; 
     } 
     else 
     { 
      arguments.IsValid = false; 
     } 

     return arguments; 
    } 
</script> 

Bất kỳ ý tưởng nào về lý do tại sao hàm này không được tìm thấy? Làm thế nào tôi có thể khắc phục điều này mà không cần phải thêm chức năng vào trang chủ của tôi hoặc trang tiêu thụ?

Trả lời

13

Hãy thử thay đổi tên tham số để senderargs. Và, sau khi bạn làm việc, hãy chuyển cuộc gọi sang ScriptManager.RegisterClientScriptBlock, bất kể sử dụng AJAX.

7

Khi bạn đang sử dụng Net 2.0 và Ajax - bạn nên sử dụng:

ScriptManager.RegisterClientScriptBlock 

Nó sẽ làm việc tốt hơn trong môi trường Ajax sau đó phiên bản cũ Page.ClientScript

0

Mặc dù tôi vẫn muốn có câu trả lời vì sao javascript của tôi không được nhận dạng, giải pháp mà tôi tìm thấy trong thời gian chờ đợi (và nên thực hiện ngay từ đầu) là sử dụng Asp:CompareValidator thay vì Asp:CustomValidator.

0

Ngoài ra bạn có thể sử dụng:

var amountDue = document.getElementById('<%=YourControlName.ClientID%>'); 

Điều đó sẽ tự động giải quyết các id khách hàng cho các phần tử mà không cần phải tìm ra rằng nó được gọi là 'ctl00_footerContentHolder_Fees1_FeeDue'.

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