2008-08-04 163 views
24

我在.Net 2.0網站上的用戶控件中的JavaScript中有一個自定義驗證函數,該函數用於檢查支付的費用是否超過應付費用。ASP.Net自定義客​​戶端驗證

我已經將驗證器代碼放入了ascx文件中,並且我也嘗試過使用Page.ClientScript.RegisterClientScriptBlock(),並且在兩種情況下驗證都會觸發,但無法找到JavaScript函數。

Firefox錯誤控制檯中的輸出是「feeAmountCheck未定義」。下面是函數(這是直接從firefox-採取>查看源代碼)

<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> 

任何想法,爲什麼功能不被發現?我可以如何補救這一點,而不必將功能添加到我的母版頁或使用頁面?

回答

13

嘗試改變參數名稱senderargs。並且,在您使用之後,無論使用AJAX如何,都可以將呼叫切換到ScriptManager.RegisterClientScriptBlock

7

當你正在使用的.Net 2.0和Ajax - 你應該使用:

ScriptManager.RegisterClientScriptBlock 

它將在阿賈克斯的環境中更好地工作,然後將舊版本Page.ClientScript

0

儘管我仍然想回答爲什麼我的javascript沒有被識別,但我在此期間找到的解決方案(應該首先完成)是使用Asp:CompareValidator而不是Asp:CustomValidator。你

0

還可以使用:

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

,將自動解決該元素的客戶端ID,您無需弄清楚,這就是所謂的'ctl00_footerContentHolder_Fees1_FeeDue'