2011-01-28 4 views
2

国(ドロップダウン)、住所(テキストボックス)、市(テキストボックス)、州のフォームフィールドを持つユーザーコントロールを作成する必要があります(ドロップダウン)、およびZip(テキストボックス)です。 「米国」がドロップダウンリストから選択されている場合にのみ、市、州、および郵便番号を検証する必要があります。 「検証する」とは、長さをチェックすることです。それだけです。"United States"が国として選択されている場合は、市、州、および郵便番号の検証のみ

私はカスタムバリデーターを使用しようとしましたが、一見して動作するはずのコードが何もしていないため、何かが欠けています。例:

function validateLocation(sender, args) { 
    var country = jQuery("#main_2_MailingAddress_Country").val(); 
    var city = jQuery("#main_2_MailingAddress_City").val(); 
    if (city.Length() > 0) 
    { 
     args.IsValid = true; 
    } 
    else 
    { 
     args.IsValid = country != "United States"; 
    } 
} 

サーバー側の検証:次に、ここで

<asp:CustomValidator ErrorMessage="City, State, and Zip are required fields" 
Display="None" ID="LocationValidator" 
runat="server" ClientValidationFunction="validateLocation" 
onservervalidate="LocationValidator_ServerValidate"> 
</asp:CustomValidator> 

は私の検証コード

クライアント側の検証であるI場合

protected void LocationValidator_ServerValidate(object source, ServerValidateEventArgs args) 
    { 
     if (City.Text.Length > 0) 
     { 
      args.IsValid = true; 
     } 
     else //nothing was entered for "City" 
     { 
      args.IsValid = Country.SelectedValue != "United States"; 
     } 
     //similar functions for State and Zip go here 
    } 

のみサーバーを実行する検証が行われ、フォーム上に何も記入されていない場合(アドレスフィールドの他に必要なフィールドがある場合)、他のフィールドのRequiredFieldValidatorsが起動します。しかし、都市、州、および郵便番号を除くすべてのフィールドに記入すると(米国の場合はその国が選択されます)、フォームは空でないことを伝えずに送信されます。

カスタムバリデーターに対してクライアント側とサーバー側の両方の検証を指定すると(上の例のように)、バリデーターは起動せず、フォームが送信されます。

これは長くて紛らわしい投稿かもしれませんが、どこに間違っているのか考えていますか?

+1

ポストバック時にPage.Validate()を使用して強制的にページ検証を行うことができます。 –

答えて

2

それは、彼らは(あなたが検証するコントロールを指定しましたか?)の例ではないですようRequiredFieldValidatorsと何が悪かったのか言うのは難しいのですが、ここでうまくいけば、あなたを助けるべきである例を示します

protected void LocationValidator_ServerValidate(object source, ServerValidateEventArgs args) 
     { 
      args.IsValid = IsCountryValid(); 
     } 

     private bool IsCountryValid() 
     { 
      if (Country.SelectedValue == "US") 
      { 
       if (String.IsNullOrEmpty(City.Text)) 
        return false; 

       if (String.IsNullOrEmpty(State.SelectedValue)) 
        return false; 

       if (String.IsNullOrEmpty(Zip.Text)) 
        return false; 
      } 
      else if (String.IsNullOrEmpty(Country.SelectedValue)) 
      { 
       return false; 
      } 

      return true; 
     } 

あなたがドロップダウンに値の代わりに、空の文字列を持っている場合は、当然それらの検証を変更

<asp:CustomValidator ID="LocationValidator" runat="server" 
      ErrorMessage="City, State, and Zip are required fields" Display="Dynamic" 
      OnServerValidate="LocationValidator_ServerValidate"></asp:CustomValidator> 

が、私はこのことができます願っています:私はメッセージを見ることができるようにするために、「動的」に表示を変更しました!

+0

素晴らしいです。もう1つのキーは、カスタムバリデーターにバリデーショングループを追加することでした。それから、私はこのUserコントロールを呼び出す場所のPage_Loadの内部からPage.Validate( "validationgroup")とif(!IsValid)を実行しました。あなたが論理で私を助けてくれたので、私はあなたに答えを与えます - ありがとう! – esvendsen

+0

うれしい私は助けることができました!そして、ありがとう、これは私の最初に受け入れられた答えでした。 :) – annelie

関連する問題