36

.Net 2.0 Web サイトのユーザー コントロールに JavaScript のカスタム検証関数があり、支払った料金が料金を超えていないことを確認します。

私はバリデーターコードをascxファイルに配置しました。またPage.ClientScript.RegisterClientScriptBlock()、両方のケースでバリデーションが起動しましたが、JavaScript 関数を見つけられませんでした。

Firefox のエラー コンソールの出力は"feeAmountCheck is not defined". これが関数です(これは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>

関数が見つからない理由についてのアイデアはありますか? マスター ページまたはコンシューム ページに関数を追加せずにこれを修正するにはどうすればよいですか?

4

4 に答える 4

19

引数名をsenderとに変更してみてくださいargs。そして、それが機能したら、ScriptManager.RegisterClientScriptBlockAJAX の使用に関係なく、呼び出しを に切り替えます。

于 2008-08-04T17:02:56.237 に答える
7

.Net 2.0 と Ajax を使用している場合は、次を使用する必要があります。

ScriptManager.RegisterClientScriptBlock

古い Page.ClientScript バージョンよりも Ajax 環境でうまく機能します。

于 2008-08-04T16:51:03.420 に答える
0

私のjavascriptが認識されなかった理由についてはまだ答えが欲しいのですが、その間に見つけた(そしてそもそもそうすべきだった)解決策は、のAsp:CompareValidator代わりに使用することですAsp:CustomValidator

于 2008-08-04T19:13:46.177 に答える
0

また、次を使用できます。

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

これにより、要素のクライアント ID が自動的に解決され、それが'ctl00_footerContentHolder_Fees1_FeeDue'.

于 2009-06-13T18:10:19.153 に答える