私はあなたが試したことに何の問題もありませんでした。これが私のために働いた簡単な例です:
HTML:
<asp:TextBox runat="server" ID="txt_Test" />
<asp:CustomValidator runat="server" ID="val_Test" ValidateEmptyText="true" ClientValidationFunction="MyValidation" ControlToValidate="txt_Test" ErrorMessage="Test"></asp:CustomValidator>
<asp:Button runat="server" ID="btn_Test" Text="Test" onclick="btn_Test_Click" />
<input type="button" value="disable validator" onclick="disableValidator()" />
<input type="button" value="enable validator" onclick="enableValidator()" />
Javscript:
function enableValidator() {
ValidatorEnable($('[id$=val_Test]')[0], true);
}
function disableValidator() {
ValidatorEnable($('[id$=val_Test]')[0], false);
}
function MyValidation(sender, args) {
if ($('[id$=txt_Test]').val() == "")
args.IsValid = false;
}
編集:あなたの新しい情報で、私は何が問題なのか知っていると信じています。サーバーの検証が開始される前に、ページが再ロードされます。これにより、最後の既知の状態であったサーバーに応じて、バリデーターが無効に設定されます。これは、バリデーターが、値がサーバーにポストバックされるコントロールではないためです。サーバーにコントロールを検証するように指示できる値を使用してhiddenFieldを設定できます。