2016-09-09 2 views
0

ログイン用メールアドレスとその機能の利用可能性をチェックするaspxフォームのリンクボタンを作成しました。保存ボタンで可用性確認機能を実装する

protected void lnkCheckAvailable_Click(object sender, EventArgs e) 
    { 
     SystemUserBL bl = new SystemUserBL(SessionContext.SystemUser); 
     ds = new DataSet(); 
     bl.FetchForLoginEmailAddress(ds, txtLoginEmailAddress.Text); 

     if (ds.Tables[0].Rows.Count > 0) 
     { 
      valDuplicatePassword.Visible = true; 
      valDuplicatePassword.Text = "<b>This User Name is already in use by another user.</b>"; 
     } 
     else 
     { 
      valDuplicatePassword.Visible = true; 
      valDuplicatePassword.Text = "<b>Congratulations! " + txtLoginEmailAddress.Text + " is available.</b>"; 
     } 
    } 

可用性確認のリンクボタンをクリックするとうまくいきます。ユーザー情報をテーブルに保存する別のボタン「保存」があります。今、私の問題は、「このユーザー名はすでに別のユーザーによって使用されています」と表示された場合です。情報はまだデータベースに保存されています。これを防ぐ方法を教えてください!!!

+0

なぜこれを2つの別々のアクションとして使用していますか? 「可用性の確認」チェックを行うと、ユーザー名*が利用可能になる可能性がありますが、「保存」するまでに他のユーザーが*取得した可能性があります。私は別の小切手を最初に走らせることの利点について考えることはできません。 –

+0

Ifブロックの保存ボタンを無効にするだけです。 保存時間内にユーザーのログインメールを確認したい場合は、@Demien_The_Undelieverが述べたように、保存操作をチェックしてエラーを表示することができます。 –

答えて

1

ユーザー名がデータベースに存在するかどうかに基づいて、trueまたはfalseを返すことができます。ユーザーの可用性をチェックする方法を作成できます。

ユーザーが保存ボタンを押すと、メソッドがtrueを返した場合は、そのメソッドが呼び出されます。これは、ユーザーが存在することを意味します。

private bool CheckUserAvailability() 
{ 
     SystemUserBL bl = new SystemUserBL(SessionContext.SystemUser); 
     ds = new DataSet(); 
     bl.FetchForLoginEmailAddress(ds, txtLoginEmailAddress.Text); 

     if (ds.Tables[0].Rows.Count > 0) 
     { 
      valDuplicatePassword.Visible = true; 
      valDuplicatePassword.Text = "<b>This User Name is already in use by another user.</b>"; 
      return true; 
      } 
      else 
      { 
       valDuplicatePassword.Visible = true; 
       valDuplicatePassword.Text = "<b>Congratulations! " + txtLoginEmailAddress.Text + " is available.</b>"; 
       return false; 
      } 
} 

linkをクリックして呼び出すこともできます。

protected void lnkCheckAvailable_Click(object sender, EventArgs e) 
{ 
    CheckUserAvailability(); 
} 

ユーザーがデータベース内の情報を保存するよりも、存在しない場合は、Saveボタンでこのメソッドを呼び出します。

protected void Savebtn_Click(object sender, EventArgs e) 
{ 
    if(CheckUserAvailability() == false) 
    { 
    SaveUserInfoToDataBase(); 
    } 
} 
+0

私が言ったように、2人のユーザーが両方同時にこのコードを実行しようとする可能性がある場合、これらの事前チェックはすべて無意味です。例えば。どちらのユーザーも可用性をチェックしています - はい、利用可能です。両方のユーザーが「保存」を押します。コードは両方のユーザーのために実行され、ユーザー名が利用可能であると判断し、*を*押して先を押して両方のユーザーを挿入します。データベースへの 'INSERT'の実際の点でチェックする必要があります(また、重複を防ぐための一意の制約があります)。ほとんどの事前チェックは無意味になります。 –

+0

@Damien_The_Unbelieverはい私はあなたに同意しますが、この回答はOPの文脈にあります。あなたはすでにコメントを指していますが、もしあなたが好きなら、答えを編集することもできます。 – Mairaj

関連する問題