2011-12-24 10 views
2

私のC#コードは次のようなものです。条件が複数ある場合は、シングルボタンをクリックしてください。

if(TextBox1.Text.Length > 5) 
    { 
    if(TextBox2.Text.Length > 5) 
    { 
    if(TextBox3.Text.Length > 5) 
    { 
    if(TextBox4.Text.Length > 5) 
    { 
    //Action to pass to the next stage. 
    } 
    else 
    { 
    error4.text = "Textbox4 value should be minimum of 5 characters."; 
    } 
    } 
    else 
    { 
    error3.text = "Textbox3 value should be minimum of 5 characters."; 
    } 
    } 

else 
{ 
error2.text = "Textbox2 value should be minimum of 5 characters."; 
} 
} 
else 
{ 
error1.text = "Textbox1 value should be minimum of 5 characters."; 
} 

1)上記のサンプルでは、 TextBox1の値が5より小さい場合、ボタンをクリックするとelse部分に移動しerror1の値を表示するが、それ以上のエラーはチェックしない、入れ子のif-elseコンセプトを使用しています。

2)私が変更した場合ステップごとに段階的に条件がある場合は、すべてのIF条件が満たされる場合にのみアクションを実行する必要があるため、条件が満たされない場合は動作しません。

3)私は、単一のボタンの状態がクリックした場合どのように私は複数確認することができ

それぞれ「エラーラベル」に、個々のエラーを取得することはできませんすべての条件をチェックするために& &演算子を使用している場合は?

私の元のコード

if (checkavail == "available") 
     { 
      if (name.Text.Length > 0) 
      { 
       if (email.Text.Length > 5) 
       { 
        if (password1.Text.Length > 7 && password1.Text == password2.Text) 
        { 
         if (alternate.Text.Contains("@") && alternate.Text.Contains(".")) 
         { 
          if (question.Text.Length > 0) 
          { 
           if (answer.Text.Length > 0) 
           { 
            Response.Redirect("next_page.aspx"); 
           } 
           else 
           { 
            error5.Text = "Please enter your security answer"; 
           } 
          } 
          else 
          { 
           error4.Text = "Please enter your security question"; 
          } 
         } 
         else 
         { 
          error3.Text = "Invaild alternate email address"; 
         } 
        } 
        else 
        { 
         error2.Text = "Password should be minimum 8 characters and must match confirm password"; 
        } 
       } 
       else 
       { 
        error1.Text = "Email address should be minimum 6 characters"; 
       } 
      } 
      else 
      { 
       error.Text = "Please enter your name"; 
      } 
     } 
     else 
     { 
      error1.Text = "This email address is already taken. Please try another"; 
     } 

私はすべての条件を満たした時に行われるようにリダイレクトアクションを必要としています。複数のエラーが見つかった場合、各エラーは各エラーメッセージを取得する必要があります。

+0

私たちに全機能を教えてください。 –

+0

@JoePhilllips - コードが追加されました。 –

答えて

2

ありがとうございます。私は以下のように答えを見つけました。

string p1, p2, p3, p4; 
     if (TextBox1.Text.Length > 5) 
     { 
      p1 = "pass"; 
      Label1.Text = ""; 
     } 
     else 
     { 
      Label1.Text = "Textbox1 value should be minimum 5 characters."; 
      p1 = "fail"; 
     } 
     if (TextBox2.Text.Length > 5) 
     { 
      p2 = "pass"; 
      Label2.Text = ""; 
     } 
     else 
     { 
      Label2.Text = "Textbox2 value should be minimum 5 characters."; 
      p2 = "fail"; 
     } 
     if (TextBox3.Text.Length > 5) 
     { 
      p3 = "pass"; 
      Label3.Text = ""; 
     } 
     else 
     { 
      Label3.Text = "Textbox3 value should be minimum 5 characters."; 
      p3 = "fail"; 
     } 
     if (TextBox4.Text.Length > 5) 
     { 
      p4 = "pass"; 
      Label4.Text = ""; 
     } 
     else 
     { 
      Label4.Text = "Textbox4 value should be minimum 5 characters."; 
      p4 = "fail"; 
     } 
     if (p1 == "pass" && p2 == "pass" && p3 == "pass" && p4 == "pass") 
     { 
      Status.Text = "All pass"; 
     } 
2

エラーメッセージだけを処理する関数を作成します。この関数からEnumerableを返します。そして、あなたはこのようなあなたのif文をフォーマットすることができますし、それが返す列挙:

private IEnumerable GetErrors() 
{ 
    if (TextBox1.Text.Length > 5) { yield return "Textbox1 minimum bla bla"; } 
    if (TextBox2.Text.Length > 5) { yield return "Textbox2 minimum bla bla"; } 
    if (TextBox3.Text.Length > 5) { yield return "Textbox3 minimum bla bla"; } 
} 

がゼロエラーがあったかどうかを確認するためにあなたの非エラーメッセージのロジックを処理し、ちょうどif文を実行する別の関数を作成しますか、ありません。

public void DoSomething() 
{ 
    var errors = GetErrors(); 
    if (errors.Count == 0) 
     Response.Redirect("next_page.aspx"); 
    else 
     error.Text = "Please fix your errors"; 
} 
+0

Void関数は値を返しません。クラスは1つの値だけを返します。では、これはどのように機能するのですか? –

+0

私はあなたのコードの2番目の部分から何も理解しませんでした。 –

+0

エラーをチェックし、Enumerableを返す新しい関数を作成します。これらのネストされたifステートメントは対処するのに苦労するので、すべてのコードを並べ替える必要があります –

関連する問題