2012-03-31 9 views

答えて

6

あなたはこのためにCustomValidatorを使用することができますが、あなたはそれが働いて得るために知っておく必要があるものがあります。問題は、バリデータにControlToValidateプロパティを設定した場合、そのコントロールに値がある場合にのみ発生するということです。あなたの状況では、それが値を持たないときにそれを具体的に検証する必要があります。

これを回避するには、バリデーターにControlToValidateプロパティを設定しないでください。次に、クライアントとサーバーの検証ハンドラで、両方のテキストボックスに直接アクセスする必要があります。あなたのクライアント検証機能で

あなたはこのような何かを行うことができます:

:このようなことができ

protected void OnCustomServerValidate(object source, ServerValidateEventArgs e) 
{ 
    e.IsValid = true; 
    // Don't validate anything if `OtherTextBox` is empty 
    if (OtherTxtBox.Text.Trim() == String.Empty) 
    {     
     return; 
    } 

    // If we got this far then we need to set IsValid to false if the ControlToValidate has no value 
    if (TextBoxToValidate.Text.Trim() == String.Empty) 
    { 
     e.IsValid = false; 
    }    
} 

とあなたのaspxを:

function OnCustomClientValidate(source, e) { 
    e.IsValid = true; 
    var otherTextBoxValue = $('#<%=OtherTxtBox.ClientID%>').val().trim();    
    if (otherTextBoxValue == '') {     
     return; 
    } 
    var controlToValidateValue = $('#<%=TextBoxToValidate.ClientID%>').val().trim(); 
    if (controlToValidateValue == '') { 
     e.IsValid = false; 
    } 
} 

お使いのサーバーの検証方法は、このようになります。

<asp:TextBox ID="OtherTextBox" runat="server"></asp:TextBox> 
<asp:CustomValidator ID="MyCustomValidator" runat="server" ClientValidationFunction="OnCustomClientValidate" OnServerValidate="OnCustomServerValidate" Display="Dynamic" ErrorMessage="Please enter a value"></asp:CustomValidator> 
<asp:TextBox ID="TextBoxToValidate" runat="server"></asp:TextBox> 

このアプローチを使用する場合、(意図された)コントロールt私たちがそのコントロールを指定していないので、検証されるべきフォーカスが失われます。したがって、フォームの送信時にクライアント側の検証が実行されますが、検証が失敗した場合はポストバックがキャンセルされます。

+0

ご協力いただきありがとうございます。 –

1

このような検証を実行する方法の1つは、カスタム検証ツールを使用することです。カスタムバリデーターを接続して、バリデーションサーバー側またはクライアント側のどちらかを実行することができます。

必須MSDNのリンク:How to: Validate with a Custom Function for ASP.NET Server Controls

関連する問題